我在windows10本地使用spark3.0.1上的pyspark进行测试和开发,不管我尝试了什么,生成的进程数总是200个,这对于我的小测试用例来说太多了。
我正在创建spark sql上下文,如下所示:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName("pyspark_test").master("local")\
.config('spark.shuffle.partitions', '16')\
.config('spark.adaptive.enabled', 'True')\
.config("spark.adaptive.coalescePartitions.enabled", "True").getOrCreate()
做 print(spark.sparkContext._conf.getAll())
稍后显示参数已正确设置(主机已被我删除):
[('spark.master', 'local'),
('spark.driver.host', '**************'),
('spark.app.name', 'pyspark_test'),
('spark.adaptive.enabled', 'True'),
('spark.rdd.compress', 'True'),
('spark.adaptive.coalescePartitions.enabled', 'True'),
('spark.driver.port', '58352'),
('spark.serializer.objectStreamReset', '100'),
('spark.submit.pyFiles', ''),
('spark.shuffle.partitions', '16'),
('spark.executor.id', 'driver'),
('spark.submit.deployMode', 'client'),
('spark.app.id', 'local-1602571079244')]
我正在使用 spark-submit
在控制台中,每个sparksession都应该使用给定的配置创建新的。
我的代码包含 groupBy
,一个内在的 join
,和 write.csv
最后。csv输出是这里的主要问题。
当我做一个 coalesce(1)
在写入csv之前,需要3分钟才能将200个数据收集到一个csv中,输出csv有338kb。在stages概述中,我可以看到它只并行运行了2个任务,同时遍历了200个片段。否则,它只需编写200个单独的csv文件,每个文件大小为2kb,这也需要大约3分钟。
我的输入数据是两个csv文件,大小分别为3.8mb和826kb。
我尝试了这个有没有启用自适应优化,但感觉我的设置被忽略了。
我知道这个相关的问题,但那是三年半前的v1.6版。
我也尝试过先创建一个sparkcontext,设置并获取一个conf,停止sparkcontext并使用conf来进行sparksession,但是这也没有帮助。
所以我的简单问题是:为什么我的 spark.shuffle.partitions
被忽视了,我该怎么解决这个问题?
1条答案
按热度按时间cidc1ykv1#
我现在确实觉得有点傻。
我要准备一下
spark.sql.shuffle.partitions
而不是spark.shuffle.partitions
.我原以为spark会在获取一个不存在的设置时抛出一个错误,而当这个错误没有发生时,我认为这是可以的。