我正在尝试将一个数据集附加到Apache Pig中的另一个数据集。有几个例子,但我认为这与我的问题不同。
这是我的猪脚本:
line1 =使用Table();
加载'line1 / points'line20 =使用Table();
加载'line20 / points'DESCRIBE line1;
DUMP line1;
DESCRIBE line20;
DUMP line20;
X = UNION line1,line20;
DESCRIBE X;
DUMP 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'获取值。
BTW:...使用Table(); - 这只是我对CassandraStorage的实现,我自动为列提供类型。
感谢您的帮助!
解决方案
Configuration
已共享。我忘记了它,并且我在两个Table()
实例中使用相同的 ID 来初始化它们。
答案 0 :(得分:1)
使用Apache Accumulo时遇到了类似的问题。 Pig试图在两张Accumulo牌桌上进行Map侧连接。但是,由于API因重用Configuration对象而不支持同时从多个表中读取,因此无法完成此操作。 HBase没有此问题,因为即使共享Configuration对象,多个表配置也存储在不同的键下。我没有和Cassandra合作过,所以我不能确定。但我猜这是Table()LoadFunc的问题。检查LoadFunc是否通过多次调用LoadFunc来破坏配置。
测试它的一种快速方法是切换联合中关系的顺序。我愿意打赌,如果你写了UNION line20, line1;
,你会看到两份line1
。