我试图在亚马逊EMR实例上运行pyspark来读取来自dynamodb的数据,并且想知道如何在我的代码中设置拆分数和工作数?
我按照以下两个文档中的说明来提供下面的代码,该代码当前连接到dynamoDB并读取数据。 connecting to dynamoDB from pyspark 和Pyspark 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')
设置拆分和缩减器,但它似乎没有改变它。
答案 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 Dataframe和Why 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)