Python 有序单通Pypark
我试图处理一个csv,其中包含Python 有序单通Pypark,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,我试图处理一个csv,其中包含start\u time和end\u time的行,以获取并发会话的数量。我希望通过一次遍历按时间戳排序的数据,并维护一个类似于累加器的变量来保持活动会话的数量,然后执行其他一些处理。为了保持累加器的准确性,我需要确保订单在整个RDD中得到保证(因此我不能使用map或forEach) 数据库足够小,因此没有适合此操作的并行化,但足够大,无法装入RAMtoLocalIterator()实际上做了我想做的事情,但我不知道以后如何执行并行化操作 谢谢 示例代码: conc
start\u time
和end\u time
的行,以获取并发会话的数量。我希望通过一次遍历按时间戳排序的数据,并维护一个类似于累加器的变量来保持活动会话的数量,然后执行其他一些处理。为了保持累加器的准确性,我需要确保订单在整个RDD中得到保证(因此我不能使用map
或forEach
)
数据库足够小,因此没有适合此操作的并行化,但足够大,无法装入RAMtoLocalIterator()
实际上做了我想做的事情,但我不知道以后如何执行并行化操作
谢谢
示例代码:
concurrent = 0
sessions = sc.parallelize([
{start_time: '2016-01-01T00:00:00.000Z', end_time: '2016-01-01T00:01:00.000Z'}, ... ])
events = sessions.flatMap(separate_end_time).sortBy(lambda x: x['timestamp'])
# RDD [{timestamp: '2016-01-01T00:00:00.000Z', change: 1},
# {timestamp: '2016-01-01T00:10:00.000Z', change: -1}, ...]
events.forEach(apply_accumulator) # <- replace this forEach!
def apply_accumulator(session):
global concurrent
concurrent += change
session['concurrent'] = concurrent
concurrent=0
sessions=sc.parallelize([
{开始时间:'2016-01-01T00:00:00.000Z',结束时间:'2016-01-01T00:01:00.000Z'},…)
events=sessions.flatMap(单独的结束时间).sortBy(lambda x:x['timestamp'])
#RDD[{时间戳:'2016-01-01T00:00:00.000Z',更改:1},
#{时间戳:“2016-01-01T00:10:00.000Z”,更改:-1},…]
events.forEach(apply_acculator)#使用ToLocalitor并放弃收集的结果?我想通过添加属性来修改events
RDD的值,因此我不确定放弃收集的结果将如何工作。我可以使用toLocalIterator创建一个新属性的新数组,然后使用zip和map,但理想情况下,有一种方法可以转换为“非本地迭代器”