我想找到这个查询的每月最大值,以得到每月最繁忙的机场。
如果不使用sql命令,是否有pyspark函数来获取最大值并将rdd减少到12行(每月一行)?
from pyspark import SparkContext
from pyspark.sql import SQLContext
from operator import add
sc = SparkContext.getOrCreate()
sqlContext = SQLContext(sc)
rows = sc.textFile("data.csv")
data = rows.map(lambda line: line.split(","))
header = data.first()
q = data.filter(lambda line:( line != header))\
.map(lambda x: (x[1]+'-'+x[16], 1))\
.reduceByKey(add)\
.map(lambda x: (x[0].split('-'), x[1]))\
.map(lambda x: (x[0][0], x[0][1], x[1]))\
.collect()
sqlContext.createDataFrame(q, ['Month', 'Airport', 'Flights']).show(n=15)
+-----+-------+-------+
|Month|Airport|Flights|
+-----+-------+-------+
| 9| DAL| 4388|
| 7| STX| 43|
| 4| PNS| 834|
| 12| EUG| 549|
| 5| ERI| 120|
| 9| ATL| 34258|
| 7| PHX| 17846|
| 12| MYR| 434|
| 11| CWA| 140|
| 9| DAY| 1307|
| 12| ADQ| 60|
| 1| MTJ| 307|
| 10| APF| 1|
| 2| MAF| 657|
| 1| SRQ| 687|
+-----+-------+-------+
1条答案
按热度按时间hxzsmxv21#
您可以尝试按键(月)对项目进行分组,以获得键值对rdd,然后获得最大值,类似于: