矩阵乘法阿帕奇猪
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 个矩阵相同,(行、列、值)。
我正在尝试用 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 个矩阵相同,(行、列、值)。