gpt4 book ai didi

apache-spark - 在本地主机上 Spark

转载 作者:行者123 更新时间:2023-12-04 04:24:38 24 4
gpt4 key购买 nike

出于测试目的,虽然我没有生产集群,但我在本地使用spark:

print('Setting SparkContext...')
sconf = SparkConf()
sconf.setAppName('myLocalApp')
sconf.setMaster('local[*]')
sc = SparkContext(conf=sconf)
print('Setting SparkContext...OK!')

另外,我使用的是非常小的数据集,在PostgreSQL数据库中只有20行(〜2kb)

另外(!),我的代码也非常简单,仅通过一个键将 分组为20行并应用了琐碎的map操作
params = [object1, object2]
rdd = df.rdd.keyBy(lambda x: (x.a, x.b, x.c)) \
.groupByKey() \
.mapValues(lambda value: self.__data_interpolation(value, params))


def __data_interpolation(self, data, params):
# TODO: only for testing
return data

令我困扰的是整个执行过程大约需要 5分钟!

检查Spark UI,我发现大部分时间都花在了第6阶段:byKey方法上。 (第7阶段,collect()方法也很慢...)

一些信息:

enter image description here

enter image description here

这些数字对我来说毫无意义...为什么我需要执行22个任务(执行54秒)来处理少于1 kb的数据

尝试找出localhost的IP地址是否可能是网络问题?
我不知道...有什么线索吗?

最佳答案

似乎由于groupByKey()的使用,导致代码段中的性能降低的主要原因。 groupByKey的问题在于,它最终会拖尾所有键值对,从而导致不必要地传输了许多数据。 Avoid GroupByKey是一个很好的解释此问题的引用。

要变通解决此问题,您可以:

  • 尝试使用应该更快的reduceByKey(更多信息也包含在上面的避免GroupByKey链接中)。
  • 使用DFFrame而不是RDD,因为DF包括性能优化(并且DF GroupBy语句比RDD版本更快)。同样,当您使用Python时,可以避免PySpark RDD的Python到JVM问题。有关更多信息,请参见PySpark Internals

  • 顺便说一句,回顾上面的Spark UI图,#22引用了DAG中的任务#(而不是执行的任务数)。

    HTH!

    关于apache-spark - 在本地主机上 Spark ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40411131/

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