矩阵乘法阿帕奇猪

matrix multiplication apache pig

我正在尝试用 pig latin 执行矩阵乘法。到目前为止,这是我的尝试:

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

经过一番尝试,我想通了:

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.[=10=] as row, group. as column, SUM(B.value) AS val;

相乘矩阵应该return matrix1*matrix2 的乘积,其格式与输入的 2 个矩阵相同,(行、列、值)。