pyspark:时间表的rdd操作

问题描述 投票:0回答:1

我的文件格式为波纹管,

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的操作来解决该问题的简单方法。

python python-3.x pyspark bigdata rdd
1个回答
0
投票

要按时间在08:00:00-09:00:00(含)之间进行过滤,您只需要确保此字符串的时间部分以08:09:00:00开头,因此您的过滤功能可以是e[4].split()[1].startswith(('08:', '09:00:00'))。那么您可以执行常规的RDD reduceByKey()等。

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)]
© www.soinside.com 2019 - 2024. All rights reserved.