scala - Spark 提供 DataFrame groupBy 中所有列的列表

标签 scala apache-spark apache-spark-sql

<分区>

我需要按除"tag"

之外的所有列对 DataFrame 进行分组

现在我可以通过以下方式做到这一点:

unionDf.groupBy("name", "email", "phone", "country").agg(collect_set("tag").alias("tags"))

是否可以获取所有列("tag" 除外)并将它们传递给 groupBy 方法,而无需像我现在那样对它们进行硬编码 - "name", "email", "phone", "country".

我尝试了 unionDf.groupBy(unionDf.columns) 但它不起作用

最佳答案

这是一种方法:

import org.apache.spark.sql.functions._

val df = Seq(
  ("a", "b@c.com", "123", "US", "ab1"),
  ("a", "b@c.com", "123", "US", "ab2"),
  ("d", "e@f.com", "456", "US", "de1")
).toDF("name", "email", "phone", "country", "tag")

val groupCols = df.columns.diff(Seq("tag"))

df.groupBy(groupCols.map(col): _*).agg(collect_set("tag").alias("tags")).show
// +----+-------+-----+-------+----------+
// |name|  email|phone|country|      tags|
// +----+-------+-----+-------+----------+
// |   d|e@f.com|  456|     US|     [de1]|
// |   a|b@c.com|  123|     US|[ab2, ab1]|
// +----+-------+-----+-------+----------+

关于scala - Spark 提供 DataFrame groupBy 中所有列的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53239521/

相关文章:

mongodb - Spark rdd.count() 产生不一致的结果

apache-spark - Spark如何限制cpu核心和内存的使用?

apache-spark - 如何将流式数据集写入 Hive?

scala - Spark SQL 在分区列上运行,无需读取整行数据

python - 类型错误 : got an unexpected keyword argument

scala - 字符串被视为序列

scala - 如何对列表中的整数数量和 float 量求和 - Scala

apache-spark - Spark 与 AWS S3 连接错误 : Not able to read file from S3 location through spark-shell

apache-spark - Pyspark 数据框中的重复行

scala - 使用原始 "base"比较 Slick MappedColumnType