Apache PIG:将一个数据集附加到另一个数据集
Posted
技术标签:
【中文标题】Apache PIG:将一个数据集附加到另一个数据集【英文标题】:Apache PIG: append one dataset to another one 【发布时间】:2013-11-26 19:08:05 【问题描述】:我正在尝试将一个数据集附加到 Apache Pig 中的另一个数据集。有几个例子,但我认为这与我的问题不同。
这是我的猪脚本:
line1 = 使用 Table() 加载“line1/points”;
line20 = 使用 Table() 加载“line20/points”;
描述第 1 行;
转储第 1 行;
描述第 20 行;
转储第 20 行;
X = UNION line1, line20;
描述 X;
转储 X;
我明白了:
line1: key: bytearray,y: (name: chararray,value: long),x: (name: chararray,value: long),columns: (name: chararray,value: bytearray)
(ab48a8567d58cfea52905db0e94d88d3,(y,3),(x,3))
(ab48a8567d58cfea52905db0e94d88d3,(y,1),(x,1))
(ab48a8567d58cfea52905db0e94d88d3,(y,2),(x,2))
line20: key: bytearray,y: (name: chararray,value: long),x: (name: chararray,value: long),columns: (name: chararray,value: bytearray)
(203146881b7ef0d26902ea440e734b79,(y,20),(x,20))
(203146881b7ef0d26902ea440e734b79,(y,21),(x,21))
(203146881b7ef0d26902ea440e734b79,(y,22),(x,22))
X: key: bytearray,y: (name: chararray,value: long),x: (name: chararray,value: long),columns: (name: chararray,value: bytearray)
(203146881b7ef0d26902ea440e734b79,(y,21),(x,21))
(203146881b7ef0d26902ea440e734b79,(y,22),(x,22))
(203146881b7ef0d26902ea440e734b79,(y,20),(x,20))
(203146881b7ef0d26902ea440e734b79,(y,20),(x,20))
(203146881b7ef0d26902ea440e734b79,(y,21),(x,21))
(203146881b7ef0d26902ea440e734b79,(y,22),(x,22))
结果只是“line20”数据集的双重副本。为什么?
我想从“line1”获取值,然后从“line20”获取值。
顺便说一句:...使用 Table(); - 这只是我对 CassandraStorage 的实现,我在其中自动为列提供类型。
感谢您的帮助!
解决方案
Configuration
已共享。我忘记了,我为两个 Table()
实例使用相同的 ID 来初始化它们。
【问题讨论】:
如果您可以将示例数据减少到几行/几列 - 这会有所帮助。 完成。我希望它有所帮助。 谢谢。这看起来真的很奇怪。我会尝试将文本文件作为输入做同样的事情,用普通的 PigStorage 加载它们。只是为了进行健全性检查。如果这有帮助,那么我会得出结论,问题出在 Table() 中。您确定这两个调用不会相互重叠吗? 是的,UNION
在两个加载有... PigStorage(',');
的文件上工作正常。我刚刚检查过了。不,这两个Table()
调用不会相互重叠。但是,我将在我的Table()
课程中搜索问题。谢谢。
我错了。对不起。两个Table()
实例确实重叠。 @Pradeep Gollakota 指出配置对象是共享的。那是我的错误。感谢您的帮助。
【参考方案1】:
我在使用 Apache Accumulo 时遇到了类似的问题。 Pig 试图在两个 Accumulo 表上进行 Map 侧连接。但是,由于重用配置对象,API 不支持同时读取多个表,因此无法做到这一点。 HBase 没有这个问题,因为即使 Configuration 对象是共享的,但多个表配置存储在不同的 key 下。我没有与 Cassandra 合作过,所以我不能完全确定。但我猜这是 Table() LoadFunc 的问题。检查 LoadFunc 是否没有通过多次调用 LoadFunc 来破坏配置。
测试它的一种快速方法是切换联合中的关系顺序。我敢打赌,如果你写了UNION line20, line1;
,你会看到两份line1
。
【讨论】:
是的,UNION line20, line1
给了我两份line1
。
这是关键:配置对象是共享的 谢谢你的帮助。现在可以使用了。以上是关于Apache PIG:将一个数据集附加到另一个数据集的主要内容,如果未能解决你的问题,请参考以下文章
Apache Pig - 在脚本中多次调用 Java UDF ToJSON