【问题标题】:Calculate frequency of column in data frame using spark sql使用 spark sql 计算数据框中列的频率
【发布时间】:2017-07-21 10:30:36
【问题描述】:

我正在尝试获取 Spark 数据框列中不同值的频率,例如 Python Pandas 中的“value_counts”。频率是指表格列中出现的最高值(例如排名 1 值、排名 2、排名 3 等。在预期输出中,1 在列 a 中出现了 9 次,因此它具有最高频率。

我用的是Spark SQL,但是还是不行,可能是我写的reduce操作不对。

   **Pandas Example**
  value_counts().index[1]

  **Current Code in Spark** 
   val x=  parquetRDD_subset.schema.fieldNames

  val dfs = x.map(field => spark.sql
  (s"select 'ParquetRDD' as TableName, 
  '$field' as column,
  min($field) as min, max($field) as max,
  SELECT number_cnt FROM (SELECT $field as value,
  approx_count_distinct($field) as number_cnt FROM peopleRDDtable 
  group by $field) as frequency from peopleRDDtable"))

  val withSum = dfs.reduce((x, y) => x.union(y)).distinct()

   withSum.show()

问题区域在下面的查询中。

  SELECT number_cnt FROM (SELECT $field as value,
  approx_count_distinct($field) as number_cnt FROM peopleRDDtable 
  group by $field)

  **Expected output** 

   TableName   | column  | min  | max   | frequency1 |
  _____________+_________+______+_______+____________+
  ParquetRDD   | a       | 1    | 30    |    9       |
 _____________+_________+______+_______+____________+
  ParquetRDD   | b       | 2    | 21    |    5       | 

我该如何解决这个问题?请帮忙。

【问题讨论】:

    标签: scala apache-spark apache-spark-sql spark-dataframe


    【解决方案1】:

    我可以使用count($field) 而不是approx_count_distinct($field) 来解决下面的问题。然后我用Rank解析函数得到了first rank的值。它奏效了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-28
      • 2021-12-12
      • 1970-01-01
      • 2022-01-27
      • 2020-12-29
      相关资源
      最近更新 更多