我试图在apache pig中将一个数据集附加到另一个数据集。有几个例子,但我认为这不同于我的问题。
这是我的Pig剧本:
line1=使用table()加载“line1/points”;
line20=使用table()加载“line20/points”;
描述线路1;
倾倒线1;
描述第20行;
卸料管线20;
x=活接头线1,线20;
描述x;
转储x;
我明白了:
第1行:{键:bytearray,y:(名称:chararray,值:long),x:(名称:chararray,值:long),列:{(名称:chararray,值:bytearray)}}
(ab48a8567d58cfea52905db0e94d88d3,(y,3),(x,3))
(ab48a8567d58cfea52905db0e94d88d3,(y,1),(x,1))
(ab48a8567d58cfea52905db0e94d88d3,(y,2),(x,2))
第20行:{键:bytearray,y:(名称:chararray,值:long),x:(名称:chararray,值:long),列:{(名称:chararray,值:bytearray)}}
(203146881b7ef0d26902ea440e734b79,(y,20),(x,20))
(203146881b7ef0d26902ea440e734b79,(y,21),(x,21))
(203146881b7ef0d26902ea440e734b79,(y,22),(x,22))
x:{键:bytearray,y:(名称:chararray,值:long),x:(名称:chararray,值:long),列:{(名称:chararray,值: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来初始化它们。
1条答案
按热度按时间rqmkfv5c1#
在使用apache accumulo时,我遇到了类似的问题。pig试图在两个accumulo表上进行Map侧连接。但是,由于配置对象的重用,api不支持同时从多个表中读取数据,因此无法执行此操作。hbase没有这个问题,因为即使配置对象是共享的,多个表配置也存储在不同的键下。我没有和Cassandra合作过,所以我不能确定。但我猜这是table()loadfunc的问题。检查loadfunc是否没有从loadfunc的多次调用中破坏配置。
检验这一点的一个快速方法是改变工会关系的顺序。我敢打赌如果你写
UNION line20, line1;
你会看到两份line1
.