如何在使用最新的spark版本

时间:2017-10-01 09:08:44

标签: shuffle pyspark-sql

我想在pyspark代码中重置spark.sql.shuffle.partitions配置,因为我需要加入两个大表。但是下面的代码在最新的spark版本中不起作用,错误说"没有方法" setConf"在xxx"

#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
import pyspark
from pyspark.context import SparkContext
from pyspark.sql.session import SparkSession
sc = SparkContext('local')
spark = SparkSession(sc)

spark.sparkContext.setConf("spark.sql.shuffle.partitions", "1000")
spark.sparkContext.setConf("spark.default.parallelism", "1000")

# or using the follow, neither is working 
spark.setConf("spark.sql.shuffle.partitions", "1000")
spark.setConf("spark.default.parallelism", "1000")

我想知道如何重置" spark.sql.shuffle.partitions"现在

2 个答案:

答案 0 :(得分:1)

SparkSession提供了一个RuntimeConfig接口来设置和获取Spark相关参数。你的问题的答案是:

spark.conf.set("spark.sql.shuffle.partitions", 1000)

参考:https://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.sql.RuntimeConfig

我错过了你的问题是关于pyspark。 Pyspark有一个类似的界面spark.conf。 请参阅:https://spark.apache.org/docs/latest/api/python/pyspark.sql.html?highlight=sparksession#pyspark.sql.SparkSession.conf

答案 1 :(得分:1)

请注意,当将shuffle分区设置为大于2000时,我们在Spark SQL“ Group By” /“ Distinct”实现中发现了一个缺陷。我们对大约3000条记录的数据集进行了测试,其中38列有38条列的大约1800条唯一记录。

当我们使用38列并将“ spark.sql.shuffle.partitions”设置为2001来运行“ Distinct”或“ Group By”查询时,不同记录的数量少于1800,例如1794。但是,当我们将其设置为2000时,同一查询给我们的记录数为1800。

因此,基本上,当shuffle分区大于2000时,Spark会错误地删除一些记录。

我们使用Spark v2.3.1进行了测试,并将很快提交Bug Jira。我需要准备一个测试数据以进行演示,但是我们已经通过我们的真实数据集对此进行了确认。