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

标签 hadoop apache-pig

我有以下数据的例子

id : long,
list: {(itemId: Long, itemName: charArray)}

在我的数据中,list 可以是一包元组或 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)};

最佳答案

{} 没有任何类型。袋子里面总是有一个元组类型。 list 和你的空包需要有相同的类型。

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

也许试试这个?

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

关于Hadoop:如果 Pig 中的字段为空,则创建空包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20509581/

相关文章:

hadoop - 使用SORT时Apache Pig拉丁语法错误

hadoop - 在Apache PIG中按父值过滤包

hadoop - 如何只提取 pig 的最后记录?

maven - 使用 Maven 编译 Hadoop 需要运行 surefire 测试?

sql - AND子句无法在配置单元中使用

python - pig udf中python代码的正确输入/输出?

hadoop - hive 或 pig 动态表

hadoop - 实现 RawComparator 真的那么快吗?

java - 导入com.googlecode.javacpp.BytePointer无法在hadoop上运行

linux - 预认证失败 : Password read interrupted while getting initial credentials