【发布时间】:2021-06-30 20:54:20
【问题描述】:
我有一个关于使用 Spark 解决我在 Python 中经常遇到的问题的一般性问题:使用 multiprocessing 包使用不同的参数设置对同一组数据执行相同的任务。
考虑以下玩具示例(请注意,这只是 Python 处理的示例;您可能使用了另一种方法):
import multiprocessing as mp
import pandas as pd
import numpy as np
mydf = pd.DataFrame({'a':np.random.random(100)})
output = mp.Queue()
def count_number_of_rows_above_k(indf,k,output):
answer = sum(indf.a > k)
output.put(answer)
processes = [mp.Process(target=count_number_of_rows_above_k,args=(mydf,k,output)) for k in np.random.random(10)]
for p in processes:
p.start()
for p in processes:
p.join()
results = [output.get() for item in processes]
print results
关键是我有一个数据块,在本例中是 Pandas 数据帧,我使用不同的参数值对其执行标准函数。我并行执行此操作,然后在最后收集结果。 这就是我想在 Spark 中做的事情,我相信我可以更轻松地扩展并从内置的容错中受益。在现实生活中,函数当然会复杂得多,数据也会大得多。
在我阅读 Spark 时,我看到的所有示例都具有使用 Spark 数据帧的内置例程。例如,计算列数、对列求和、过滤等。我想将自定义函数应用于我的数据。
Spark 适合我的问题吗?如果是这样,我该如何实施?我需要事先将数据帧推送到所有工作节点吗?
我只是要求一些指示。那里肯定有我还没有找到的文档。谢谢。
【问题讨论】:
标签: python apache-spark pyspark multiprocessing