我有一個豬腳本,屬於2豬關係,可以說A和B.A是一個小關係,B是一個大關係。我的UDF應該將所有的A加載到每臺機器的內存中,然後在處理B時使用它。目前我這樣做。Apache Pig將整個關係加載到UDF中
A = foreach smallRelation Generate ...
B = foreach largeRelation Generate propertyOfB;
store A into 'templocation';
C = foreach B Generate CustomUdf(propertyOfB);
然後我讓每一臺機器都從'templocation'加載到A上。這樣做有效,但是我有兩個問題。
- 我的理解是我應該以某種方式使用HDFS緩存,但我不確定如何將關係直接加載到HDFS緩存中。
- 當我在我的UDF中重新加載文件時,我必須編寫邏輯來解析從輸出到文件的輸出,當我寧願直接使用包和元組時(是否有內置的Pig java函數來解析字符串回到Bag/Tuple形式?)。
有誰知道它應該怎麼做?
做A和B有列你可以做一個JOIN? – alexeipab
在這種情況下,是的,他們有相同的數據並可以加入。我需要比較A的每一行和B的每一行。我想我可以做一個交叉連接,但這不會更低效嗎?我將重新處理B A - 超過必要的1倍,並且我將失去一次一行地運行B所有行的能力,這是必需的。 – Manny
你可以發表一個輸入和輸出數據的例子嗎? – alexeipab