Apache PIG:将一个数据集附加到另一个数据集

时间:2013-11-26 19:08:06

标签: cassandra apache-pig

我正在尝试将一个数据集附加到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 来初始化它们。

1 个答案:

答案 0 :(得分:1)

使用Apache Accumulo时遇到了类似的问题。 Pig试图在两张Accumulo牌桌上进行Map侧连接。但是,由于API因重用Configuration对象而不支持同时从多个表中读取,因此无法完成此操作。 HBase没有此问题,因为即使共享Configuration对象,多个表配置也存储在不同的键下。我没有和Cassandra合作过,所以我不能确定。但我猜这是Table()LoadFunc的问题。检查LoadFunc是否通过多次调用LoadFunc来破坏配置。

测试它的一种快速方法是切换联合中关系的顺序。我愿意打赌,如果你写了UNION line20, line1;,你会看到两份line1