2013-11-26 40 views
2

我试图在Apache Pig中追加一个数据集到另一个数据集。有几个例子,但我认为不同于我的问题。Apache PIG:将一个数据集追加到另一个

这是我的猪的脚本:

LINE1 =负载 'LINE1 /点' 利用表();

line20 =使用Table()加载'line20/points';

DESCRIBE line1;

DUMP line1;

DESCRIBE line20;

DUMP line20;

X = UNION line1,line20;

DESCRIBE X;

DUMP X;

我得到这个:

线路1:{键:字节组,Y:(名称:chararray,值:长),X(名称:chararray,值:长),列:{ (名称:chararray,值:字节阵列)}}

(ab48a8567d58cfea52905db0e94d88d3,(Y,3),(X,3))

(ab48a8567d58cfea52905db0e94d88d3,(Y,1),(X,1))

(ab48a8567d58cfea52905db0e94d88 d3,(y,2),(x,2))

line20:{key:bytearray,y :(名称:chararray,value:long),x:(name:chararray,value:long) :{(名称:chararray,值:字节阵列)}}

(203146881b7ef0d26902ea440e734b79,(Y,20),(X,20))

(203146881b7ef0d26902ea440e734b79,(Y,21),(X,21) )

(203146881b7ef0d26902ea440e734b79,(Y,22),(X,22))

X:{键:字节组,Y:(名称:chararray,值:长)中,x:(名称:chararray,价值:长),柱NS:{(名称:chararray,值:字节阵列)}}

(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'的值。

顺便说一句:...使用表(); - 这只是我实现的CassandraStorage,我自动为列提供类型。

感谢您的帮助!

Configuration是共享的。我忘了它,并且我正在使用Table()实例相同的ID来初始化它们。

+0

如果您可以将您的示例数据减少到几行/列 - 这将有所帮助。 – Ruslan

+1

完成。我希望它有帮助。 – ahypki

+0

谢谢。这看起来很奇怪。我会尝试将文本文件作为输入,并使用普通的PigStorage加载它们。只是为了一个健全的检查。如果这有帮助,那么我会得出结论,问题在Table()中。你确定两个调用不会相互重叠吗? – Ruslan

回答

1

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

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

+0

是的,'UNION line20,line1'给了我'line1'的两个副本。 – ahypki

+0

这是关键:_Configuration对象是shared_感谢您的帮助。它现在有效。 – ahypki

相关问题