Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/silverlight/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 如何合并spark数据集中的行以合并字符串列_Apache Spark - Fatal编程技术网

Apache spark 如何合并spark数据集中的行以合并字符串列

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

我需要将数据集中的两行或多行合并为一行。必须根据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("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可以使用字符串数组列。我在我的答案中添加了一个解决方案。