如何在pyspark中设置拆分和缩减器的数量

时间:2017-12-02 19:24:52

标签: python apache-spark pyspark emr

我试图在亚马逊EMR实例上运行pyspark来读取来自dynamodb的数据,并且想知道如何在我的代码中设置拆分数和工作数?

我按照以下两个文档中的说明来提供下面的代码,该代码当前连接到dynamoDB并读取数据。 connecting to dynamoDB from pysparkPyspark documentation

from pyspark.context import SparkContext
sc = SparkContext.getOrCreate()
conf = {"dynamodb.servicename": "dynamodb", "dynamodb.input.tableName":
       "Table1", "dynamodb.endpoint": "https://dynamodb.us-east-
        1.amazonaws.com", "dynamodb.regionid":"us-east-1", 
       "mapred.input.format.class": 
       "org.apache.hadoop.dynamodb.read.DynamoDBInputFormat",
       "mapred.output.format.class": 
       "org.apache.hadoop.dynamodb.write.DynamoDBOutputFormat"
orders = sc.hadoopRDD(inputFormatClass="org.apache.hadoop.dynamodb.read.DynamoDBInputFormat",
                     keyClass="org.apache.hadoop.io.Text",
                      valueClass="org.apache.hadoop.dynamodb.DynamoDBItemWritable", conf=conf)

我试图改变SparkConf类的实例和并行性的值,但不确定它将如何影响SparkContext变量

SparkConf().set('spark.executor.instances','4')
SparkConf().set('spark.default.parallelism', '128')

设置拆分和缩减器,但它似乎没有改变它。

2 个答案:

答案 0 :(得分:2)

  

我试图改变SparkConf类的实例和并行性的值,但不确定它将如何影响SparkContext变量

除非在SparkConf

的初始化过程中传递了SparkContext个对象
conf = SparkConf()  \
    .set('spark.executor.instances','4') \
    .set('spark.default.parallelism', '128')

sc = SparkContext(conf=conf)

他们没有配置。如果使用getOrCreate

获取现有上下文
sc = SparkContext()
...
sc = SparkContext.getOrCreate(conf=conf) 

只会应用一些(不是default.parallelism)。

  

想知道如何设置分割数

对于RDD输入,请使用Hadoop配置(mapred.min.split.size):,Number of Partitions of Spark DataframeWhy does partition parameter of SparkContext.textFile not take effect?

答案 1 :(得分:0)

我通常更改SparkConf的方式是:

from pyspark import SparkContext
from pyspark import SparkConf

sconf = SparkConf()

sconf.set("spark.default.parallelism", 200)

sc = SparkContext(conf = sconf)