Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache spark 不平衡的键会导致Spark中的性能问题_Apache Spark_Cpu Usage_Pyspark_Distributed Computing - Fatal编程技术网

Apache spark 不平衡的键会导致Spark中的性能问题

Apache spark 不平衡的键会导致Spark中的性能问题,apache-spark,cpu-usage,pyspark,distributed-computing,Apache Spark,Cpu Usage,Pyspark,Distributed Computing,我有一个问题,我有一组键,和一组(更大的)记录,我想在键之间聚合。我遇到的问题是,每个键的记录数差别很大。一个键可以有数百万条映射到它的记录,而很多键只有1-5条映射到它们的记录。最终目标是聚合值(存储在列表中)。现在,我正在做的就是: data = sc.textFile("my/path/to/file/*).map(lambda x: x.split(",")) kv = data.map(lambda x: (x[0],x[1:]) kv.take(4)看起来像这样: ([key1]、

我有一个问题,我有一组键,和一组(更大的)记录,我想在键之间聚合。我遇到的问题是,每个键的记录数差别很大。一个键可以有数百万条映射到它的记录,而很多键只有1-5条映射到它们的记录。最终目标是聚合值(存储在列表中)。现在,我正在做的就是:

data = sc.textFile("my/path/to/file/*).map(lambda x: x.split(","))
kv = data.map(lambda x: (x[0],x[1:])
kv.take(4)看起来像这样:

([key1]、[1,2,3,4])、([key1]、[1,2,3,4])、([key2]、[1,1,1])、([key2]、[0,1,0,1])

现在,我正在执行
kv.reduceByKey(lambda,b:a+b)
。然后,我执行迭代加法以产生以下输出:
([key1],[2,4,6,8]),([key2],[1,2,1,2])

然而,我注意到,
reduceByKey
花费的时间非常长。鉴于此,这是一个洗牌操作,需要时间。但我也意识到,每个键的记录数量的严重不平衡可能会导致不理想的线程处理,因为记录在键之间的分布不均匀

我认为记录/键的不平衡可能是导致减速的原因,这一想法正确吗?我能做些什么来解决这个问题?我听说过顺便提到的盐渍,但我不知道如何实施