如火如荼的数据帧 - pyspark

时间:2018-03-27 15:11:48

标签: python-3.x apache-spark hadoop pyspark bigdata

我有一个带有列(年龄)的火花数据帧。我需要编写一个pyspark脚本,将数据帧作为10岁的范围(11-20岁,21-30岁,......)并找到每个年龄段的计数。需要如何处理通过这个

代表:

我有以下数据框

+-----+
|age  |  
+-----+
|   21|      
|   23|     
|   35|     
|   39|    
+-----+
分组后(预期)

+-----+------+
|age  | count|
+-----+------+
|21-30|    2 |    
|31-40|    2 |      
+-----+------+

1 个答案:

答案 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功能文档