来自 pyspark returns JVM 错误的数据集的多处理

Multiprocessing on dataset from pyspark returns JVM error

我需要 运行 在 Jupyter notebook 中并行使用一些聚类算法。我想要并行的集群功能在进行多线程处理或单独 运行 时起作用。然而,它 returns

raise Py4JError("{0} does not exist in the JVM".format(name))

当我尝试多处理时。我对多处理没有太多经验,我做错了什么?

聚类代码:

def clustering(ID, df):
    pandas_df = df.select("row", "features", "type") \
    .where(df.type == ID).toPandas()

    print("process " + str(ID) + ": preparing data for clustering")
    feature_series = pandas_df["features"].apply(lambda x: x.toArray())
    objs = [pandas_df, pd.DataFrame(feature_series.tolist())]
    t_df = pd.concat(objs, axis=1)

    print("process " + str(ID) + ": initiating clustering")
    c= #clustering algo here
    print("process " + str(ID) + " DONE!")

    return

多处理代码:

import multiprocessing as mp

k = 4

if __name__ == '__main__':
    pl = []
    for i in range(0,k):
        print("sending process:", i)
        process = mp.Process(target=clustering, args=(i, df))
        jobs.append(process)
        process.start()

    for process in pl:
        print("waiting for join from process")
        process.join()

错误是由于子进程无法访问同一内存(pyspark 数据帧所在的内存)造成的。

首先通过将对 pyspark 数据帧的访问权限放在另一个函数中来对数据集进行分区,如下所示:

    pandas_df = df.select("row", "features", "type") \
    .where(df.type == ID).toPandas()

然后 运行 在分离的 Pandas 数据帧上进行聚类。