Apache spark 如何合并spark数据集中的行以合并字符串列
我需要将数据集中的两行或多行合并为一行。必须根据id列进行分组。要合并的列是字符串。我需要在合并列中获得一个逗号分隔的字符串。如何实现这一点是Java。 输入行Apache spark 如何合并spark数据集中的行以合并字符串列,apache-spark,Apache Spark,我需要将数据集中的两行或多行合并为一行。必须根据id列进行分组。要合并的列是字符串。我需要在合并列中获得一个逗号分隔的字符串。如何实现这一点是Java。 输入行 col1,col2 1,abc 2,pqr 1,abc1 3,xyz 2,pqr1 预期产出: col1, col2 1, "abc,abc1" 2, "pqr,pqr1" 3, xyz 要聚合两个单独的列,请执行以下操作: your_data_frame .withColumn("aggre
col1,col2
1,abc
2,pqr
1,abc1
3,xyz
2,pqr1
预期产出:
col1, col2
1, "abc,abc1"
2, "pqr,pqr1"
3, xyz
要聚合两个单独的列,请执行以下操作:
your_data_frame
.withColumn("aggregated_column", concat_ws(",", col("col1"), col("col2"))
以防万一,这里是什么进口除了通常的东西
import static org.apache.spark.sql.functions.*;
编辑
如果要按名称聚合任意数量的列,可以采用以下方法:
String[] column_names = {"c1", "c2", "c3"};
Column[] columns = Arrays.asList(column_names)
.stream().map(x -> col(x))
.collect(Collectors.toList())
.toArray(new Column[0]);
data_frame
.withColumn("agg", concat_ws(",", columns));
dataframe
.groupBy("ID")
.agg(concat_ws(",", collect_list(col("col1")) ))
编辑#2:分组依据和concat
如果要按列“ID”分组并聚合另一列,可以通过以下方式进行:
String[] column_names = {"c1", "c2", "c3"};
Column[] columns = Arrays.asList(column_names)
.stream().map(x -> col(x))
.collect(Collectors.toList())
.toArray(new Column[0]);
data_frame
.withColumn("agg", concat_ws(",", columns));
dataframe
.groupBy("ID")
.agg(concat_ws(",", collect_list(col("col1")) ))
请共享数据、代码和预期输出。编辑以添加预期内容的示例您的示例无法通过waymyDS.groupBy(“ID”).agg(functions.concat_ws(“,”,myDS.col(“主题”))读取;这就是我所做的,但我看到一个例外,即表达式主题既不存在于groupBy中,也不是聚合的一部分。我想从2个或更多具有相同ID值的不同行聚合同一列。econcat_ws不是聚合函数。这就是为什么会出现这个错误。据我所知,唯一的解决方案是使用functions.collect_list,它将把您的值聚合到一个列表中,然后应用一个UDF(用户定义函数)。事实证明,没有UDF是可能的。concat_ws可以使用字符串数组列。我在我的答案中添加了一个解决方案。