2015-10-06 114 views
1

我想在拉丁美洲拉丁执行矩阵乘法。这是我迄今的尝试:矩阵乘法阿帕奇猪

matrix1 = LOAD 'mat1' AS (row,col,value); 
matrix2 = LOAD 'mat2' AS (row,col,value); 

mult_mat = COGROUP matrix1 BY row, matrix2 BY col; 
mult_mat = FOREACH mult_mat { 
    A = COGROUP matrix1 BY col, matrix2 BY row; 
    B = FOREACH A GENERATE group AS col, matrix1.value*matrix2.value AS prod; 
    GENERATE group AS row, B.col AS col, SUM(B.prod) AS value;} 

但是,这是行不通的。我得到停在

A = COGROUP matrix1... 

ERROR org.apache.pig.tools.grunt.Grunt - ERROR 1200: <line 14, column 37> mismatched input 'matrix1' expecting LEFT_PAREN 
+1

COGROUP不是嵌套的foreach文件中的有效运算符:https://pig.apache.org/docs/r0.7.0/piglatin_ref2.html#FOREACH。提取:允许的操作是DISTINCT,FILTER,LIMIT,ORDER和SAMPLE。 –

回答

4

经过一番玩弄,我想通了:

matrix1 = LOAD 'mat1' AS (row,col,value); 
matrix2 = LOAD 'mat2' AS (row,col,value); 

A = JOIN matrix1 BY column FULL OUTER, matrix2 BY row; 

B = FOREACH A GENERATE matrix1::row AS m1r, matrix2::column AS m2c, (matrix1::value)*(matrix2::value) AS value; 

C = GROUP B BY (m1r, m2c); 

multiplied_matrices = FOREACH C GENERATE group.$0 as row, group.$1 as column, SUM(B.value) AS val; 

倍增矩阵应该返回矩阵1 *矩阵2的产品在相同的格式2个矩阵输入(行,列,值)。