使用Pyspark中的RDD按关键字(Month)排序



我有这个RDD,想按月份(Jan->Dec(排序。我怎么能在pyspark中做到这一点?注意:不希望使用spark.sql或Dataframe。

+-----+-----+
|Month|count|
+-----+-----+
|  Oct| 1176|
|  Sep| 1167|
|  Dec| 2084|
|  Aug| 1126|
|  May| 1176|
|  Jun| 1424|
|  Feb| 1286|
|  Nov| 1078|
|  Mar| 1740|
|  Jan| 1544|
|  Apr| 1080|
|  Jul| 1237|
+-----+-----+

您可以将rdd.sortBy与python日历模块中的辅助字典一起使用,也可以创建自己的月份字典:

import calendar
d = {i:e for e,i in enumerate(calendar.month_abbr[1:],1)}
#{'Jan': 1, 'Feb': 2, 'Mar': 3, 'Apr': 4, 'May': 5, 'Jun': 6, 'Jul': 7, 
#'Aug': 8, 'Sep': 9, 'Oct': 10, 'Nov': 11, 'Dec': 12}
myrdd.sortBy(keyfunc=lambda x: d.get(x[0])).collect()

[('Jan', 1544),
('Feb', 1286),
('Mar', 1740),
('Apr', 1080),
('May', 1176),
('Jun', 1424),
('Jul', 1237),
('Aug', 1126),
('Sep', 1167),
('Oct', 1176),
('Nov', 1078),
('Dec', 2084)]
myList = myrdd.collect()
my_list_dict = dict(myList)
months = ['Jan', 'Feb', 'Mar', 'Apr', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
newList = []
for m in months:
newList.append((m, my_list_dict[m]))
print(newList)

最新更新