我正在尝试连接 2 个数据帧,但我希望将结果作为左侧数据帧(示例中的 cDf
)的列中右侧数据帧(下例中的 dDf
)的行列表。
我让它只适用于一列,但添加更多列时遇到问题。
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]|
+--------+-------+---------------------------+
另外,有没有办法做这样的事情:
Dataset<Row> aggDf = allDf
.groupBy(cDf.col("*"))
.agg(collect_list(col("c50")));
最佳答案
对于问题的第二部分,您可以这样做:
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(...);
关于java - 连接 2 个 Spark 数据帧,以列表形式获取结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45843716/