在pyspark rdd中获取每月最大值,而不使用sql函数

ubbxdtey  于 2021-05-29  发布在  Spark
关注(0)|答案(1)|浏览(425)

我想找到这个查询的每月最大值,以得到每月最繁忙的机场。
如果不使用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|
+-----+-------+-------+
hxzsmxv2

hxzsmxv21#

您可以尝试按键(月)对项目进行分组,以获得键值对rdd,然后获得最大值,类似于:

max_by_month = (data
  .map(lambda x: (x[0], x))  # Convert to PairwiseRD by month
  # Take a maximum of the passed arguments by the last element (flights)
  .reduceByKey(lambda x1, x2: max(x1, x2, key=lambda x: x[-1])) 
  .values()) # Drop keys

相关问题