pig實戰 pig常用語法總結,教你快速入門——結構篇


  任何一種語言的學習掌握都離不開結構和算法的思想,本文將從結構方面剖析Pig常用操作后的結構,總結了其中的一些容易犯錯的地方。

  詳細語法介紹請參考http://pig.apache.org/docs/r0.8.1/piglatin_ref2.html#Casting+Relations+to+Scalars;個人的總結請參考下一篇pig常用語法總結,教你快速入門——算法篇

結構:

  LOAD 后的數據結構為:

    A: {col1: int,col2: int,col3: int,col4: double,col5: double}

  GROUP BY 后的數據結構為:
    B: {group:tuple(col1:int,col2:int),B:bag{:tuple(col1:int,col2:int,col3:int,col4:int)}

  GENERATE group后數據結構為
    C: {group:tuple(col1: int,col2: int,col3: int),double,double}

  GROUP A all后的數據結構為:
    B: {group: chararray,A: {(col1: int,col2: int,col3: int,col4: int)}}

  DISTINCT后的結構是:
    C: {group:tuple(col1:int, col2:int), long};}

  對A FILTER操作B = FILTER A BY A.col3 >2;后結構為
    B: {col1: int,col2: int,col3: int,col4: int}
    而對B進行分組操作后,結構為
    C: {group:tuple(col1: int,col2: int),B:bag{(col1: int,col2: int,col3: int,col4: int)}}
    當引用的列為bag中的field時,要帶上bag名,即B.col3;

  對兩個文件按一個字段JOIN后結構為:
    C: {A::col1: int,A::col2: int,A::col3: int,A::col4: double,A::col5: double,B::col6: int,B::col7: int,B::col8: int,B::col9: int}

    對field的引用方法為A::coln

  UNION 兩個文件后的結構是:
    C: {col1: int,col2: int}

  FILTER后,字段名沒有改變,所以接下來group的時候不能帶關系名稱,對於這點,當出現““scalar has more than one row in the output”錯誤時,先describe上個操作結果結構,如果是C: {group: (col1: int,col2: int),B: {(col1: int,col2: int,col3: int,col4: int)}}這個結構,則下部操作要帶B關系名,如果是"C: {A::col1: int,A::col2: int,A::col3: int,A::col4: double,A::col5: double,B::col6: int,B::col7: int,B::col8: int,B::col9: int}"則要把X.col3換成X::col3;如果是A:{(col1: int,col2: int,col3: int,col4: int)},則不能帶A這個關系,因此當操作的是一個bag時,要帶上這個bag的標識,如在group by后要帶上bag引用,而簡單的FLTER不能帶上關系名。
同時,在FOREACH時,每個元素都是一個bag,這時對bag的字段操作要帶上操作引用如B.c。

   


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
  © 2014-2022 ITdaan.com 联系我们: