标签: apache-pig

Pig如何在"加载"语句中使用Hadoop Globs?

正如我之前所说,Pig不能很好地处理空(0字节)文件.不幸的是,有很多方法可以创建这些文件(即使在Hadoop实用程序中).

我认为通过使用Hadoop的glob语法显式加载LOAD语句中与给定命名约定匹配的文件,我可以解决这个问题.不幸的是,这似乎不起作用,因为即使我使用glob过滤到已知良好的输入文件,我仍然遇到前面提到的0字节失败.

这是一个例子:假设我在S3中有以下文件:

  • mybucket/a/b /(0字节)
  • mybucket/a/b/myfile.log(> 0字节)
  • mybucket/a/b/yourfile.log(> 0字节)

如果我在我的猪脚本中使用这样的LOAD语句:

myData = load 's3://mybucket/a/b/*.log as ( ... )
Run Code Online (Sandbox Code Playgroud)

我希望Pig不会在0字节文件上窒息,但它仍然会.是否有一个技巧让Pig实际上只查看与预期的glob模式匹配的文件?

hadoop apache-pig

8
推荐指数
1
解决办法
5427
查看次数

猪非聚合警告输出位置?

Pig: 0.8.1-cdh3u2
Hadoop: 0.20.2-cdh3u0
Run Code Online (Sandbox Code Playgroud)

调试FIELD_DISCARDED_TYPE_CONVERSION_FAILED警告,但我似乎无法在任何地方打印个别警告.通过-w或aggregate.warnings=false切换禁用聚合会删除摘要消息,但它也会删除实际警告,因此我无法看到哪种类型的转换失败.

在这次运行的猪日志中没有写任何内容,而且我无法找到带有个别警告的日志.我是否想念任何明显的东西,或者根本不起作用?

hadoop apache-pig

8
推荐指数
1
解决办法
888
查看次数

在猪中投射分组元组

我有一个形式(t,a,b)的元组集合,我想在猪群中按b分组.分组后,我想从每个组中的元组中过滤掉b,并为每个组生成一包过滤后的元组.

例如,假设我们有(1,2,1)(2,0,1)(3,4,2)(4,1,2)(5,2,3)

猪脚本会产生{(1,2),(2,0)} {(3,4),(4,1)} {(5,2)}

问题是:我该如何产生这个结果?我习惯于看到聚合操作遵循一组操作的示例.我不太清楚如何过滤元组并将它们放回袋中.谢谢你的协助!

apache-pig

8
推荐指数
1
解决办法
2855
查看次数

在Pig中JOIN之后生成别名中的所有字段

我想执行的"保持所有等同a于A其中a.field == b.field的一些b在B" Apache中的猪.我这样实现它,

AB_joined = JOIN A by field, B by field;
A2 = FOREACH AB_joined GENERATE A::field as field, A::field2 as field2, A::field3 as field3;
Run Code Online (Sandbox Code Playgroud)

列举所有A的条目是非常愚蠢的,我宁愿做类似的事情,

A2 = FOREACH AB_joined GENERATE flatten(A);
Run Code Online (Sandbox Code Playgroud)

但是,这似乎不起作用.有没有其他方法我可以做一些相当于没有枚举A的字段的东西?

hadoop apache-pig

8
推荐指数
1
解决办法
1万
查看次数

如何:PIG中的Python UDF字典返回模式

使用Apache PIG时从Python UDF返回字典的输出模式是什么.

我有一本字典词典,如下所示:

dict = {x:{a:1,b:2,c:3}, y:{d:1,e:3,f:9}}
Run Code Online (Sandbox Code Playgroud)

我的输出架构看起来像

@outputSchema("m:map[im:map[X:float,Y:float]]") 
Run Code Online (Sandbox Code Playgroud)

**方括号,因为在Pig中我们使用[]作为此词典转换为的地图.

python schema dictionary user-defined-functions apache-pig

8
推荐指数
1
解决办法
1939
查看次数

按多个字段分组并输出元组

我有以下格式的Feed:

Hour Key  ID  Value
   1  K1 001      3
   1  K1 002      2
   2  K1 005      4
   1  K2 002      1
   2  K2 003      5
   2  K2 004      6
Run Code Online (Sandbox Code Playgroud)

并且我希望将Feed分组(Hour, Key)然后将其加总,Value但保持ID为元组:

({1, K1}, {001, 002}, 5)
({2, K1}, {005}, 4)
({1, K2}, {002}, 1)
({2, K2}, {003, 004}, 11)
Run Code Online (Sandbox Code Playgroud)

我知道如何使用FLATTEN生成总和Value但不知道如何输出ID为元组.这是我到目前为止:

A = LOAD 'data' AS (Hour:chararray, Key:chararray, ID:chararray, Value:int);
B = GROUP A BY (Hour, Key);
C = …
Run Code Online (Sandbox Code Playgroud)

hadoop apache-pig

8
推荐指数
1
解决办法
1万
查看次数

转换一组键值元组以映射到Apache Pig

我是Pig的新手,我想将一个元组转换为每个元组中具有特定值的映射作为键.基本上我想改变:

{(id1, value1),(id2, value2), ...} 成 [id1#value1, id2#value2]

我一直在网上寻找一段时间,但我似乎无法找到解决方案.我试过了:

bigQMap = FOREACH bigQFields GENERATE TOMAP(queryId, queryStart);
Run Code Online (Sandbox Code Playgroud)

但我最终得到了一袋地图(例如{[id1#value1], [id2#value2], ...}),这不是我想要的.如何从一袋键值元组中建立一张地图?

下面是我正在尝试运行的特定脚本,以防它相关

rawlines = LOAD '...' USING PigStorage('`');
bigQFields = FOREACH bigQLogs GENERATE GFV(*,'queryId')
   as queryId, GFV(*, 'queryStart')
   as queryStart;
bigQMap = ?? how to make a map with queryId as key and queryStart as value ?? ;
Run Code Online (Sandbox Code Playgroud)

map apache-pig

8
推荐指数
1
解决办法
9778
查看次数

如何在Pig中将一个组变成一个单元组?

由此:

(1, {(1,2), (1,3), (1,4)} )
(2, {(2,5), (2,6), (2,7)} )
Run Code Online (Sandbox Code Playgroud)

......我们怎么能产生这个?

((1,2),(1,3),(1,4))
((2,5),(2,6),(2,7))
Run Code Online (Sandbox Code Playgroud)

......我们怎么能产生这个呢?

(1, 2, 3, 4)
(2, 5, 6, 7)
Run Code Online (Sandbox Code Playgroud)

对于单行,我知道该怎么做.问题是我必须迭代多行并同时操作内部组.

hadoop apache-pig

8
推荐指数
1
解决办法
5万
查看次数

错误1066:无法打开别名的迭代器 - 猪

刚开始猪; 尝试从文件加载数据并从此转储它.加载似乎是正确的,不会抛出任何错误.以下是查询:

NYSE = LOAD'/root/Desktop/Works/NYSE-2000-2001.tsv'使用PigStorage()AS(交换:chararray,stock_symbol:chararray,日期:chararray,stock_price_open:float,stock_price_high:float,stock_price_low:float,stock_price_close :float,stock_volume:int,stock_price_adj_close:float);

当我尝试执行转储时,它会抛出以下错误:

猪堆跟踪

错误1066:无法为别名打开迭代器NYSE org.apache.pig.impl.logicalLayer.FrontendException:错误1066:无法在org.apache.pig.PigServer.openIterator(PigServer.java:857)处打开别名NYSE的迭代器org.apache.pig.tools.grunt.GruntParser.processDump(GruntParser.java:682)位于org.apache.pig的org.apache.pig.tools.pigscript.parser.PigScriptParser.parse(PigScriptParser.java:303). tools.grunt.GruntParser.parseStopOnError(GruntParser.java:189)位于org.apache.pig.tools.grunt.Grunt.run的org.apache.pig.tools.grunt.GruntParser.parseStopOnError(GruntParser.java:165) Grunt.java:69)org.apache.pig.Main.run(Main.java:490)atg.apache.pig.Main.main(Main.java:111)引起:java.io.IOException:Job在org.apache.pig.PigServer.openIterator(PigServer.java:849)中以异常状态FAILED终止

知道是什么导致了这个问题吗?

apache-pig

8
推荐指数
1
解决办法
3万
查看次数

错误1066:无法在Pig,Generic解决方案中打开别名的迭代器

Apache Pig中一个非常常见的错误消息是:

错误1066:无法打开别名的迭代器

有几个问题提到了这个错误,但没有一个提供处理它的通用方法.因此这个问题:

当你收到错误1066时该怎么办:无法打开别名的迭代器?

debugging apache-pig hortonworks-data-platform hdp

8
推荐指数
1
解决办法
9909
查看次数