问题标签 [apache-pig]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3681 浏览

hadoop - 在另一个关系上使用 FOREACH 时将关系传递给 PIG UDF?

我们正在使用 Pig 0.6 来处理一些数据。我们数据的其中一列是以空格分隔的 id 列表(例如:35 521 225)。我们正在尝试将其中一个 id 映射到另一个包含 2 列映射的文件,例如(因此第 1 列是我们的数据,第 2 列是第 3 方数据):

35 6009
521 21599
225 51991
12 6129

我们编写了一个UDF,它接受列值(例如:“35 521 225”)和文件中的映射。然后,我们将拆分列值并遍历每个值,并从传入的映射中返回第一个映射值(认为这是逻辑上的工作方式)。

我们像这样在 PIG 中加载数据:

data = LOAD 'input.txt' USING PigStorage() AS (name:chararray, category:chararray);

mappings = LOAD 'mappings.txt' USING PigStorage() AS (ourId:chararray, theirId:chararray);

那么我们的生成是:

output = FOREACH data GENERATE title, com.example.ourudf.Mapper(category, mappings);

但是我们得到的错误是:
'解析过程中出现错误:[data::title: chararray,data::category, chararray] 中的别名映射无效'

似乎 Pig 试图在我们的原始数据上找到一个名为“映射”的列。如果课程不存在的话。有没有办法传递加载到 UDF 中的关系?

PIG 中的“地图”类型有什么方法可以帮助我们吗?还是我们需要以某种方式加入价值观?

编辑:更具体地说 - 我们不想将所有类别 ID 映射到第 3 方 ID。我们只是想映射第一个。UDF 将遍历我们的类别 ID 列表 - 并在找到第一个映射值时返回。因此,如果输入看起来像:

一些产品\t35 521 225

输出将是:
someProduct\t6009

0 投票
19 回答
208201 浏览

hadoop - 猪和蜂巢的区别?为什么两者都有?

我的背景——在 Hadoop 世界中已有 4 周的历史。使用 Cloudera 的 Hadoop VM 涉足 Hive、Pig 和 Hadoop。已阅读 Google 关于 Map-Reduce 和 GFS 的论文(PDF 链接)。

我明白那个-

  • Pig 的语言 Pig Latin 是从(适合程序员的思维方式)SQL 之类的声明式编程风格的转变,而 Hive 的查询语言与 SQL 非常相似。

  • Pig 位于 Hadoop 之上,原则上也可以位于 Dryad 之上。我可能错了,但 Hive 与 Hadoop 紧密耦合。

  • Pig Latin 和 Hive 命令都编译为 Map 和 Reduce 作业。

我的问题 - 当一个(比如猪)可以达到目的时,两者兼有的目标是什么。仅仅是因为 Pig 被 Yahoo! 传福音了吗?和 Facebook 的 Hive?

0 投票
1 回答
218 浏览

database - 从聚合的博客数据中检索信息,怎么做?

我想知道如何从聚合日志中检索数据?这就是我所拥有的:
- 每天大约 30GB 的未压缩日志数据加载到 HDFS 中(这将很快增长到大约 100GB)
这是我的想法:
- 每天晚上使用 Pig 处理这些数据
- 读取、拆分和自定义日志UDF 检索如下数据:timestamp, url, user_id(可以说,这就是我所需要的)
- 从日志条目并将其加载到 HBase (日志数据将无限存储)

然后,如果我想知道哪些用户在给定的时间范围内看到了特定页面,我可以快速查询 HBase,而无需每次查询都扫描整个日志数据(我想要快速的答案 - 分钟是可以接受的)。并且将同时进行多个查询。

您如何看待这个工作流程?您认为将这些信息加载到 HBase 中有意义吗?还有哪些其他选择,它们与我的解决方案相比如何?我感谢所有评论/问题和答案。先感谢您。

0 投票
1 回答
1231 浏览

hadoop - 从 pig 中的分组数据生成二元组合

给定我的 userid,itemid 格式的输入数据:

我想生成每个组中项目的所有组合(顺序不重要)。我最终打算对我组中的项目执行 Jaccard 相似性。

理想情况下,我的二元组将被生成,然后我将输出展平为:

代表用户 ID 的字母 ABC 并不是输出所必需的,我只是为了说明目的而展示它们。从那里,我会计算每个二元组的出现次数以计算杰卡德。我很想知道是否有其他人正在使用 pig 进行类似的相似性计算(对不起!)并且已经遇到过这种情况。

我查看了猪教程随附的 NGramGenerator,但它与我想要完成的内容并不匹配。我想知道也许 python 流 UDF 是要走的路。

0 投票
5 回答
910 浏览

python - 如何对大型数据集进行分组

我有包含两列的简单文本文件,都是整数

等等..

我需要按第二个值对数据集进行分组,这样输出就可以了。

现在的问题是该文件非常大,大约 34 Gb,我尝试编写一个 python 脚本将它们分组到一个字典中,其值为整数数组,但仍然需要太长时间。(我想array('i')append.

我现在正计划编写一个猪脚本,我计划在伪分布式 hadoop 机器(一个 Amazon EC3 高内存大型实例)上运行该脚本。

我想知道是否有更简单的方法可以做到这一点。

更新: 在内存中保留这么大的文件是没有问题的,在 python 解决方案的情况下,我计划在第一次运行时进行 4 次运行,只有从 1 到 1000 万的第二个 col 值在下一次运行时考虑 1000 万到 2000 万被考虑等等。但事实证明这真的很慢。

pig / hadoop 解决方案很有趣,因为它将所有内容都保存在磁盘上[好吧大部分]。

为了更好地理解这个数据集包含了大约 4500 万 twitter 用户的连接信息,文件中的格式意味着第二个数字给出的用户 ID 在第一个数字之后。

我用过的解决方案:

0 投票
1 回答
3246 浏览

mapreduce - 通过 Pig 提交 map/reduce 作业时捆绑 jars?

我正在尝试将 Hadoop、Pig 和 Cassandra 结合起来,以便能够通过简单的 Pig 查询来处理存储在 Cassandra 中的数据。问题是我无法让 Pig 创建实际使用 CassandraStorage 的 Map/Reduce 作业。

我所做的是从我的一台集群机器上复制了 storage-conf.xml 文件到 contrib/pig(Cassandra 的源发行版)中的一台机器上,然后将这些东西编译到 cassandra_loadfun.jar 文件中。

接下来,我调整了 example-script.pig 以包含所有 jar:

因此,如果我没记错的话,应该将 jar 包捆绑到提交给 hadoop 的作业中。但是在运行这项工作时,它只会向我抛出一个异常:

我不明白,因为 thrift 库已明确列出,并且应该捆绑在一起,不是吗?

0 投票
5 回答
1526 浏览

hadoop - 是否存在可证明无法通过 map/reduce 辅助的规范问题?

我正在尝试了解 hadoop 和 map/reduce 的界限,这将有助于了解我们知道 map/reduce 无法解决的非平凡问题或问题类别。

如果改变问题的一个因素可以简化 map/reduce,那肯定会很有趣。

谢谢

0 投票
11 回答
47644 浏览

hadoop - Pig Latin:从日期范围加载多个文件(目录结构的一部分)

我有以下情况-

猪版使用 0.70

示例 HDFS 目录结构:

正如您在上面列出的路径中看到的,其中一个目录名称是日期戳。

问题:我想加载从 20100810 到 20100813 的日期范围内的文件。

我可以将日期范围的 'from' 和 'to' 作为参数传递给 Pig 脚本,但是如何在 LOAD 语句中使用这些参数。我能够做到以下几点

以下适用于 hadoop:

但是当我在猪脚本中使用 LOAD 尝试相同时它失败了。如何使用传递给 Pig 脚本的参数从日期范围加载数据?

错误日志如下:

我是否需要使用 Python 等高级语言来捕获范围内的所有日期戳并将它们作为逗号分隔列表传递给 LOAD?

干杯

0 投票
8 回答
51523 浏览

hadoop - 在 Hadoop 中将多个文件合并为一个

我将多个小文件放入我的输入目录中,我想在不使用本地文件系统或编写 mapreds 的情况下将它们合并到一个文件中。有没有办法使用 hadoof fs 命令或 Pig 来做到这一点?

谢谢!

0 投票
2 回答
1014 浏览

apache-pig - 在 Pig 脚本中调用 RESTful 服务

我正在编写一个加载大型文本文件的 Pig 脚本(我的第一个)。对于该文本文件中的每条记录,需要将一个字段的内容发送到 RESTful 服务进行处理。无需评估或过滤任何内容。捕获数据,将其发送出去,脚本不需要任何返回。

我假设这种功能需要 UDF,但我对 Pig 还很陌生,所以我不清楚我应该构建什么类型的函数。我最好的猜测是存储函数,因为数据最终存储在某个地方,但我觉得得出这个结论所涉及的猜测量比我想要的要高。

任何见解或指导将不胜感激。