计算Spark数据框中所有列(300列)的每个不同值的出现

时间:2020-08-29 05:25:46

标签: apache-spark apache-spark-sql

我有一个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列。请帮忙!

1 个答案:

答案 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