bucketing一个sparkDataframe-pyspark

ktca8awb  于 2021-06-01  发布在  Hadoop
关注(0)|答案(1)|浏览(320)

我有一个带有列(age)的sparkDataframe。我需要写一个pyspark脚本来将Dataframe存储为10岁的范围(例如11-20岁,21-30岁,…),并找到每个年龄段条目的计数。需要关于如何通过这个的指导吗
例如:
我有以下Dataframe

+-----+
|age  |  
+-----+
|   21|      
|   23|     
|   35|     
|   39|    
+-----+

扣扣后(预计)

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

kyxcudwk1#

运行这种计算的一种简单方法是计算底层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])

然后可以使用以下方法将其转换回Dataframe:


# 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()

有关更多信息,请查看 histogram RDDAPI中函数的文档

相关问题