gpt4 book ai didi

python - Spark 在非常小的数据集上运行非常慢

转载 作者:行者123 更新时间:2023-12-05 06:25:02 24 4
gpt4 key购买 nike

以下简单的 spark 程序运行需要 4 分钟。我不知道这段代码有什么问题。

首先,我生成一个非常小的 rdd

D = spark.sparkContext.parallelize([(0,[1,2,3]),(1,[2,3]),(2,[0,3]),(3,[1])]).cache()

然后我生成一个向量

P1 = spark.sparkContext.parallelize(list(zip(list(range(4)),[1/4]*4))).cache()

然后我定义了一个函数来执行map步骤

def MyFun(x):
L0 = len(x[2])
L = []
for i in x[2]:
L.append((i,x[1]/L0))
return L

然后我执行下面的代码

P0 = P1
D0 = D.join(P1).map(lambda x: [x[0],x[1][1],x[1][0]]).cache()
C0 = D0.flatMap(lambda x: MyFun(x)).cache()
P1 = C0.reduceByKey(lambda x,y:x+y).mapValues(lambda x:x*1.2+3.4).sortByKey().cache()
Diff = P1.join(P0).map(lambda x: abs(x[1][0]-x[1][1])).sum()

鉴于我的数据很小,我无法找出这段代码运行如此缓慢的原因......

最佳答案

我有一些建议可以帮助您加快这项工作。

只在需要时缓存

缓存的过程就是把你创建的dag写到磁盘上。因此,缓存每个步骤可能会花费很多而不是加快过程。

我建议您只缓存 P1。

使用 DataFrames 让 Spark 助您一臂之力

之后,我强烈建议你使用DataFrame api,Spark 可以为你做一些优化,比如下推谓词优化。

最后但并非最不重要的一点是,使用自定义函数的成本也很高。如果您使用的是 DataFrames,请尝试仅使用 org.apache.spark.sql.functions 模块中的现有函数。

使用 Spark UI 分析代码

我还建议通过 Spark UI 分析您的代码,因为这可能不是您的代码的问题,因为您的数据很小,而是节点的问题。

关于python - Spark 在非常小的数据集上运行非常慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57328416/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com