【发布时间】:2015-12-23 14:43:41
【问题描述】:
我用 Python 和 pandas 编写了一个程序,它需要一个非常大的数据集(6 个月内每月约 400 万行),将其按 2 列(日期和标签)分组,然后应用一个函数到每组行。每个分组中有可变数量的行 - 从几行到数千行不等。每月有数千个组(标签-日期组合)。
我当前的程序使用多处理,所以它非常高效,我认为可以很好地映射到 Spark。我以前使用过 map-reduce,但是在 Spark 中实现它时遇到了麻烦。我确定我在流水线中遗漏了一些概念,但我所阅读的所有内容似乎都集中在键值处理或按任意分区拆分分布式数据集,而不是我正在尝试做的事情。是否有这样做的简单示例或范例?任何帮助将不胜感激。
编辑: 这是我目前正在做的一些伪代码:
reader = pd.read_csv()
pool = mp.Pool(processes=4)
labels = <list of unique labels>
for label in labels:
dates = reader[(reader.label == label)]
for date in dates:
df = reader[(reader.label==label) && (reader.date==date)]
pool.apply_async(process, df, callback=callbackFunc)
pool.close()
pool.join()
当我说异步时,我的意思是类似于 pool.apply_async()。
【问题讨论】:
-
process是一个任意函数,或者您有什么特别的想法?它是可交换的和关联的吗? -
@zero323 对于这个程序,
process是一个函数,它读取该日期的外部数据,然后遍历该日期标签的所有行并计算几个不同的值以与之关联每一行。
标签: python apache-spark pyspark