我有以下数据的一个例子
id : long,
list: {(itemId: Long, itemName: charArray)}
在我的数据中,list可以是一包元组,也可以是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条答案
按热度按时间7uzetpgm1#
{}
没有类型。袋子里总是有一个元组类型。list
你的空袋子也要有同样的型号。不幸的是,我没有Pig在一种方式,我可以测试这个你,我不知道确切地怎么做,但它将是沿着这条线的东西。。。我找不到关于如何设置包类型的好文档。。。
试试这个吧?
h5qlskok2#
空元组应为()
空袋子应该是{}
空Map应为[]
apeeds0o3#
如果您有机会使用它,请查看apache datafu项目:http://datafu.incubator.apache.org
它有很多对Pig有用的东西,包括
datafu.pig.bags.NullToEmptyBag()
,这正是您想要的: