Hadoop:如果Pig中的字段为空,则创建空包

use*_*456 3 hadoop apache-pig

我有一个以下数据的例子

id : long,
list: {(itemId: Long, itemName: charArray)}
Run Code Online (Sandbox Code Playgroud)

在我的数据中,列表可以是一包元组或null.我想将null更改为空包(由0个元素组成)

我尝试过类似的东西:

answer = FOREACH data
 GENERATE (list is null ? {} : list) AS list;
Run Code Online (Sandbox Code Playgroud)

它说{}和list不是兼容的模式.我想知道如何创建一个兼容架构的空包

我最终这样做了,它起作用了:

answer = FOREACH data
GENERATE (list is null ? (bag{tuple(long,chararray)}){} : list) AS list:{(itemId: long, itemName: charArray)};
Run Code Online (Sandbox Code Playgroud)

Don*_*ner 5

{}没有类型.包里面总是有一个元组类型.list你的空包需要有相同的类型.

不幸的是,我没有Pig up,我可以为你测试这个,我不确定该怎么做,但它会有点像这样......我找不到好的关于如何设置包的类型的文档...

试试吧?

answer = FOREACH data
GENERATE (list is null ? (bag{tuple(long,chararray)}){} : list) AS list;
Run Code Online (Sandbox Code Playgroud)