【发布时间】:2019-09-02 13:45:06
【问题描述】:
具有多个动态聚合操作的 Spark 数据帧上的聚合。
我想使用具有多个动态聚合操作(由用户以 JSON 格式传递)的 Scala 对 Spark 数据帧进行聚合。我正在将 JSON 转换为 Map。
以下是一些示例数据:
colA colB colC colD
1 2 3 4
5 6 7 8
9 10 11 12
我正在使用的 Spark 聚合代码:
var cols = ["colA","colB"]
var aggFuncMap = Map("colC"-> "sum", "colD"-> "countDistinct")
var aggregatedDF = currentDF.groupBy(cols.head, cols.tail: _*).agg(aggFuncMap)
我必须将aggFuncMap 仅作为Map 传递,以便用户可以通过 JSON 配置传递任意数量的聚合。
上述代码适用于某些聚合,包括sum、min、max、avg 和count。
但是,不幸的是,此代码不适用于countDistinct(可能是因为它是驼峰式的?)。
运行上述代码时,出现以下错误:
线程“主”org.apache.spark.sql.AnalysisException 中的异常:未定义函数:'countdistinct'。该函数既不是注册的临时函数,也不是在数据库'default'中注册的永久函数
任何帮助将不胜感激!
【问题讨论】:
标签: scala apache-spark count apache-spark-sql distinct