以序列作为键参数的 Spark Dataframe groupBy [重复]

Posted

技术标签:

【中文标题】以序列作为键参数的 Spark Dataframe groupBy [重复]【英文标题】:Spark Dataframe groupBy with sequence as keys arguments [duplicate] 【发布时间】:2016-05-30 11:26:25 【问题描述】:

我有一个 spark dataFrame,我想通过多个键聚合值

正如 spark 文档所建议的那样:

def groupBy(col1: String, cols: String*): GroupedData 分组 DataFrame 使用指定的列,所以我们可以对它们运行聚合

所以我做了以下

 val keys = Seq("a", "b", "c")
 dataframe.groupBy(keys:_*).agg(...)

Intellij Idea 向我抛出以下错误:

    非重复参数的扩展 类型不匹配:预期 Seq[Column],实际 Seq[String]

但是,我可以手动传递多个参数而不会出错:

dataframe.groupBy("a", "b", "c").agg(...)

所以,我的问题是:我怎样才能以编程方式做到这一点?

【问题讨论】:

【参考方案1】:

要么使用带有groupBy(cols: Column*) 的列

import org.apache.spark.sql.functions.col

val keys = Seq("a", "b", "c").map(col(_))
dataframe.groupBy(keys:_*).agg(...)

head / tailgroupBy(col1: String, cols: String*)

val keys = Seq("a", "b", "c") 
dataframe.groupBy(keys.head, keys.tail: _*).agg(...)  

【讨论】:

以上是关于以序列作为键参数的 Spark Dataframe groupBy [重复]的主要内容,如果未能解决你的问题,请参考以下文章

使用多列作为存储在 Apache Spark 中的数组中的键来连接两个 Dataframe

Spark:DataFrame 上 UDF 的任务不可序列化

python - “将重新索引布尔系列键以匹配DataFrame索引。来自ipykernel导入kernelapp作为app“

PySpark 将 Dataframe 作为额外参数传递给映射

创建数据集时 Spark 无法反序列化记录

Spark DataFrame to Dict - 字典更新序列元素错误