【问题标题】:Using Apache Spark to parallelize processing of a Pandas dataframe使用 Apache Spark 并行处理 Pandas 数据帧
【发布时间】: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


    【解决方案1】:

    Koalas 是一个能够做这种事情的库,它维护了一个类似于 pandas 的 API。

    【讨论】:

      【解决方案2】:

      只要您使用 RDD 或 Spark 数据框而不是 ? 数据框,Spark 就会为您并行化。 ? 将是单线程的。只需 UDF 操作即可定义您的函数。

      【讨论】:

      • 我的函数能返回任何数据类型吗?我特别想到了一行值。所以函数的输入是一个数据框和一组参数值,输出是一行。然后,我会将所有行垂直连接到一个数据框中,表示所有参数组合的结果。
      【解决方案3】:

      其实你必须明白什么是什么意思。 Spark 是用于巨大的数据处理和繁重的工作.....另一方面,Pandas DF 用于 ML 和 DL...大多数 ML 和 DL 库将直接输入作为 Pandas DF 、系列或 Numpy 系列... . 所以对于机器学习来说,这是必不可少的......但是你是否在所有数据上建立机器学习模型......理想情况下不是。 因此,对于 ETL 类型的操作,Spark DF 或 DS 是必不可少的……对于 ML Pandas,DF 是必不可少的。

      【讨论】:

        猜你喜欢
        • 2017-01-24
        • 1970-01-01
        • 1970-01-01
        • 2016-12-21
        • 1970-01-01
        • 2021-01-29
        • 2016-08-12
        • 2023-03-04
        • 2018-08-06
        相关资源
        最近更新 更多