Получение месячного максимального значения в PySpark RDD без SQL функций - PullRequest
0 голосов
/ 17 июня 2020

Я хочу найти максимальное месячное значение этого запроса, чтобы получить самый загруженный аэропорт в месяц.

Без использования команд 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 Ответ

0 голосов
/ 17 июня 2020

Вы можете попробовать сгруппировать элементы по ключу (месяцу), чтобы получить пару ключ-значение 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...