我有一个300列的spark数据框,每列有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列。请帮忙!
答案 0 :(得分:2)
您可以轻松地做到以下所述
首先收集所有列名和转换作为键值。 像下面一样
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