我有一个带有列(年龄)的火花数据帧。我需要编写一个pyspark脚本,将数据帧作为10岁的范围(11-20岁,21-30岁,......)并找到每个年龄段的计数。需要如何处理通过这个
代表:
我有以下数据框
+-----+
|age |
+-----+
| 21|
| 23|
| 35|
| 39|
+-----+
分组后(预期)
+-----+------+
|age | count|
+-----+------+
|21-30| 2 |
|31-40| 2 |
+-----+------+
答案 0 :(得分:0)
运行此类计算的简便方法是计算基础RDD上的直方图。
鉴于已知的年龄范围(幸运的是,这很容易组合在一起 - 在这里,使用1,11,21等),生成直方图相当容易:
hist = df.rdd\
.map(lambda l: l['age'])\
.histogram([1, 11, 21,31,41,51,61,71,81,91])
这将返回一个带有"年龄范围的元组"和他们各自的观察计数,如:
([1, 11, 21, 31, 41, 51, 61, 71, 81, 91],
[10, 10, 10, 10, 10, 10, 10, 10, 11])
然后您可以使用以下命令将其转换回数据框:
#Use zip to link age_ranges to their counts
countTuples = zip(hist[0], hist[1])
#make a list from that
ageList = list(map(lambda l: Row(age_range=l[0], count=l[1]), countTuples))
sc.parallelize(ageList).toDF()
有关详细信息,请查看the RDD API
中的histogram
功能文档