无法将猪元组传递给python UDF

时间:2016-05-09 15:39:22

标签: python hadoop tuples apache-pig udf

我有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)
}

2 个答案:

答案 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);