计算火花数据框中所有列(300 列)的每个不同值的出现次数
Posted
技术标签:
【中文标题】计算火花数据框中所有列(300 列)的每个不同值的出现次数【英文标题】:count occurrences of each distinct value of all columns(300 columns) in a spark dataframe 【发布时间】:2020-08-29 05:25:46 【问题描述】:我有一个包含 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 列。请帮忙!
【问题讨论】:
如果您可以接受近似的不同计数,请考虑使用高效的approx_count_distinct
【参考方案1】:
如下所述,您可以轻松做到这一点
首先收集所有列名和转换作为键值。 如下所示
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
【讨论】:
以上是关于计算火花数据框中所有列(300 列)的每个不同值的出现次数的主要内容,如果未能解决你的问题,请参考以下文章