java - 加入2个Spark数据帧,将结果作为列表

时间:2017-08-23 15:22:27

标签: java apache-spark apache-spark-sql

我正在尝试加入2个数据帧,但我希望将结果作为左数据帧列中正确数据帧(下例中为dDf)的行列表({{1在示例中)。

我使用了一列,但问题添加了更多列

cDf

输出:

    Seq<String> joinColumns = new Set2<>("c1", "c2").toSeq();
    Dataset<Row> allDf = cDf.join(dDf, joinColumns, "inner");
    allDf.printSchema();
    allDf.show();

    Dataset<Row> aggDf = allDf
            .groupBy(cDf.col("c1"), cDf.col("c2"))
            .agg(collect_list(col("c50")));
    aggDf.show();

另外,有没有办法做类似的事情:

+--------+-------+---------------------------+
|c1      |c2     |collect_list(c50)          |
+--------+-------+---------------------------+
|    3744|1160242|         [6, 5, 4, 3, 2, 1]|
|    3739|1150097|                        [1]|
|    3780|1159902|            [5, 4, 3, 2, 1]|
|     132|1200743|               [4, 3, 2, 1]|
|    3778|1183204|                        [1]|
|    3766|1132709|                        [1]|
|    3835|1146169|                        [1]|
+--------+-------+---------------------------+

1 个答案:

答案 0 :(得分:0)

对于问题的第二部分,你可以这样做:

    String[] fields = cDf.columns();
    Column[] columns = new Column[fields.length];
    for (int i = 0; i < fields.length; i++) {
        columns[i] = cDf.col(fields[i]);
    }
    Dataset<Row> sDf = allDf.groupBy(columns).agg(...);