2013-11-26 38 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

相關問題