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

时间:2013-12-11 02:42:43

标签: hadoop apache-pig

我有以下数据的示例

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)};

3 个答案:

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

空元组应该是()

空袋应该是{}

空地图应为[]