python - pyspark:时间步长的rdd操作
问题描述
我的文件格式如下,
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
基于操作的简单方法来解决它。
解决方案
要按 08:00:00-09:00:00(含)之间的时间进行过滤,您只需要确保此字符串的时间部分以08:
or开头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)]
推荐阅读
- angular - regForm.reset() 清除表单但也禁用它?
- javascript - 在 react.js 中单击时如何读取按钮中的值字段
- javascript - 当元素的大小减小并应用过渡时,滚动条推到顶部
- java - 使用文件和 json 正文提出请求
- hbase - HBase 2.0.0:区域链中的过渡洞中的区域
- php - Postgresql SQLSTATE[22021]: Character not in repertoire: Ö
- python - django分页过滤器-根据一行但出现错误
- linux - Move and copy text file in bash script
- c# - Progress bar does not update on separate form from VSTO addin
- android - App crashes with 'Unfortunately Age Calculator pro has stopped working' but there are no errors while compiling