我有以下数据的示例
id : long,
list: {(itemId: Long, itemName: charArray)}
在我的数据中,列表可以是一包元组或null。我想将null更改为一个空包(由0个元素组成)
我尝试过类似的事情:
answer = FOREACH data
GENERATE (list is null ? {} : list) AS list;
它表示{}和list不兼容模式。我想知道如何创建一个兼容架构的空包
我最终做到了这一点并且有效:
answer = FOREACH data
GENERATE (list is null ? (bag{tuple(long,chararray)}){} : list) AS list:{(itemId: long, itemName: charArray)};
答案 0 :(得分:5)
{}
没有类型。包里面总是有一个元组类型。 list
和您的空袋需要具有相同的类型。
我很遗憾没有Pig的方式,我可以为你测试这个,我不确定如何做到这一点,但它将是这样的......我无法'找到关于如何设置行李类型的好文档......
尝试这个吗?
answer = FOREACH data
GENERATE (list is null ? (bag{tuple(long,chararray)}){} : list) AS list;
答案 1 :(得分:3)
如果您有机会使用它,请查看Apache DataFu项目:http://datafu.incubator.apache.org
它为Pig提供了许多有用的东西,包括datafu.pig.bags.NullToEmptyBag()
,它正是你想要的:
DEFINE NullToEmptyBag datafu.pig.bags.NullToEmptyBag();
...
answer = FOREACH data GENERATE NullToEmptyBag(list) AS list...;
答案 2 :(得分:0)
空元组应该是()
空袋应该是{}
空地图应为[]