gui*_*cgs 9 apache-spark pyspark
出于测试目的,虽然我没有生产集群,但我在本地使用spark:
print('Setting SparkContext...')
sconf = SparkConf()
sconf.setAppName('myLocalApp')
sconf.setMaster('local[*]')
sc = SparkContext(conf=sconf)
print('Setting SparkContext...OK!')
Run Code Online (Sandbox Code Playgroud)
另外,我使用的是一个非常小的数据集,在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
Run Code Online (Sandbox Code Playgroud)
困扰我的是整个执行大约需要5分钟!
检查Spark UI,我发现大部分时间花在了第6阶段:byKey方法.(第7阶段,collect()方法也很慢......)
一些信息:
这些数字对我没有意义......为什么我需要22个任务,执行54秒,处理少于1 kb的数据
它是一个网络问题,试图弄清楚localhost的IP地址?我不知道......有什么线索吗?
代码片段性能下降的主要原因似乎是由于使用了groupByKey()
. 问题在于groupByKey
,它最终会打乱所有键值对,导致大量不必要的数据被传输。解释这个问题的一个很好的参考是避免 GroupByKey。
要解决此问题,您可以:
reduceByKey
哪个应该更快(更多信息也包含在上面的避免 GroupByKey 链接中)。顺便说一下,查看上面的 Spark UI 图,#22 指的是 DAG 中的任务#(而不是执行的任务数)。
哈!
归档时间: |
|
查看次数: |
865 次 |
最近记录: |