我有一个300列的sparkDataframe,每列有10个不同的值。我需要计算所有300列的不同值的出现次数。
--------------------------------------------------------
col1 | col2 | col3 ............col299 | col 300
-------------------------------------------------------
value11 | value21 | value31 | value300 | value 301
value12 | value22 | value32 | value300 | value 301
value11 | value22 | value33 | value301 | value 302
value12 | value21 | value33 | value301 | value 302
如果单列我用下面的代码计算
import org.apache.spark.sql.functions.count
df.groupBy("col1").agg(count("col1")).show
但是如何有效地计算300列。请帮帮我!
1条答案
按热度按时间x33g5p2x1#
你可以很容易地做到下面提到的
首先收集所有列名和转换作为键值。就像下面一样
val exprs = df.columns.map((_ -> "approx_count_distinct")).toMap
那么简单df.groupBy("col1").agg(exprs)
将为所有列提供不同的值。参考文献:https://spark.apache.org/docs/2.3.1/api/sql/index.html#approx_count_distinct