我有一個關係reflat1。以下是DESCRIBE和DUMP的輸出。PIG:無法將(key,(tuple_of_3_things))轉換爲(key,tupelement1,tupelement2,tupelement3)
reflat1: {cookie: chararray,tupofstuff: (category: chararray,weight: double,lasttime: long)}
(key1,(613,1.0,1410155702)
(key2,(iOS,1.0,1410155702)
(key3,(G.M.,1.0,1410155702)
是的,我注意到括號沒有關閉。我不知道爲什麼。也許沒有括號的原因是我所有問題的根源。
我想將它轉換成一個關係(我們稱之爲reflat2)有4場,這將理想樣子:
(key1, 613, 1.0,1410155702)
(key2, iOS, 1.0,1410155702)
(key3, G.M., 1.0,1410155702)
但我的代碼是行不通的。以下是相關位。
reflat2 = foreach reflat1 {
GENERATE
cookie as cookie,
tupofstuff.(category) as category,
tupofstuff.(weight) as weight,
tupofstuff.(lasttime) as lasttime;
};
r1 = LIMIT reflat2 100;
dump r1;
導致的模式,我期望:
DESCRIBE reflat2
reflat2: {cookie: chararray,category: chararray,weight: double,lasttime: long}
但在轉儲給出了一個錯誤:
Unable to open iterator for alias r1
當我看到這些錯誤的失敗MapReduce作業,我看到:
java.lang.ClassCastException: java.lang.String cannot be cast to org.apache.pig.data.Tuple
Whic h是很奇怪的,因爲如果有什麼我要將一個元組投射到一個字符串(以及一個雙精度和一個長精度),反之亦然。
對於在尋找[錯誤1066:無法打開迭代器別名]時發現此帖子的人(http://stackoverflow.com/questions/34495085/error-1066-unable-to-open-iterator-for- alias-in-pig-generic-solution)這裏是一個[通用解決方案](http://stackoverflow.com/a/34495086/983722)。 – 2015-12-28 14:54:23