我有master.txt,它有10K记录,所以它的每一行都是一个元组和一个元组。整个相同的需要传递给python UDF。由于它有多个记录,所以存储p2preportmap会出现以下错误。请帮忙
错误如下:
无法打开别名p2preportmap的迭代器。后端错误: org.apache.pig.backend.executionengine.ExecException:错误0:标量 输出中有多行。第1名:(010301,MTS,MM),第2名 :(010B06,MTS,TN)(常见原因:“JOIN”然后“FOREACH ... GENERATE foo.bar“应该是”foo :: bar“)
Pig Script如下:
guard let json : [String : AnyObject] = try NSJSONSerialization.JSONObjectWithData(data, options: []) as? [String : AnyObject] else {throw JSONError.ConversionFailed}
if let string = json["key"] as? String {
print(string)
}
答案 0 :(得分:1)
这可以通过添加虚拟列然后分组来完成。
dummmy = foreach p2preportmap生成1,$ 0,$ 1 ....
groups = group dummy by $ 0
答案 1 :(得分:1)
让我举个例子,我有两个关系A和B
A
1,2,3
3,4,5
4,5,6
乙
1
2
3
1
2
3
1
2
3
现在我想要一个python udf来查找A打印输出的第一列,如下所示。
((1,{(1,2,3)}))
((2,))
((3,{(3,4,5)}))
((1,{(1,2,3)}))
((2,))
((3,{(3,4,5)}))
((1,{(1,2,3)}))
((2,))
((3,{(3,4,5)}))
首先,我将第一列分组,然后将其分组,以便我有一行
c = group A by $0
e = group c by 1
python udf就像下面的
def pythonudf(value,map):
print map
temp = None
for a in map:
if a[0] == value:
temp = a[1]
return value,temp
现在你使用这个udf
D = foreach B generate myudf.pythonudf($0,e.$1);