【发布时间】: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