pyspark: операция rdd для временных шагов - PullRequest
0 голосов
/ 11 ноября 2019

У меня есть формат файла, показанный ниже,

0, Alpha,-3.9, 4, 2001-02-01 08:00:00, 5, 20
0, Beta, -3.8, 3, 2001-02-01 08:15:00, 6, 21
1, Gamma,-3.7, 8, 2001-02-01 08:30:00, 7, 22
0, Alpha,-3.5, 4, 2001-02-01 08:45:00, 8, 23
0, Alpha,-3.9, 4, 2001-02-01 09:00:00, 8, 27
0, Gamma,-3.5, 5, 2001-02-01 09:15:00, 6, 21

и так далее ... Меня интересует sum of 5th element в каждом сырье для данного Alpha/Beta/Gamma для интервала времени между 08:00:00 to 09:00:00 например. Я хотел бы получить следующий результат, используя только операцию rdd, between 08:00:00 to 09:00:00.

Alpha 21
Beta 6
Gamma 7

Это то, что я сделал на данный момент;

rdd = sc.textFile(myDataset)
newrdd = rdd.map(myFun) # myFun process each line 
filterrdd = newrdd.filter(lambda e : e[4].startswith('2001-02-01') )

Но я незнать, как действоватьили, по крайней мере, не мог найти простой способ решить его, используя только операции rdd.

1 Ответ

1 голос
/ 11 ноября 2019

Чтобы выполнить фильтрацию по времени между 08: 00: 00-09: 00: 00 (включительно), вам просто нужно убедиться, что временная часть этой строки начинается с 08: или 09:00:00, таким образом, ваша функция фильтрацииможет быть e[4].split()[1].startswith(('08:', '09:00:00')). тогда вы можете сделать обычную RDD limitByKey () и т. д.

newrdd.filter(lambda e: e[4].split()[1].startswith(('08:', '09:00:00'))) \
      .map(lambda e: (e[1], int(e[5]))) \
      .reduceByKey(lambda x,y: x+y) \
      .collect()
#[(' Alpha', 21), (' Beta', 6), (' Gamma', 7)]
...