hadoop:如果pig中的字段为null,则创建空包

9avjhtql  于 2021-06-04  发布在  Hadoop
关注(0)|答案(3)|浏览(375)

我有以下数据的一个例子

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

7uzetpgm1#

{} 没有类型。袋子里总是有一个元组类型。 list 你的空袋子也要有同样的型号。
不幸的是,我没有Pig在一种方式,我可以测试这个你,我不知道确切地怎么做,但它将是沿着这条线的东西。。。我找不到关于如何设置包类型的好文档。。。
试试这个吧?

answer = FOREACH data
GENERATE (list is null ? (bag{tuple(long,chararray)}){} : list) AS list;
h5qlskok

h5qlskok2#

空元组应为()
空袋子应该是{}
空Map应为[]

apeeds0o

apeeds0o3#

如果您有机会使用它,请查看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...;

相关问题