我是Spark的新手。我试图理解hiveContext.sql("query")
语句默认生成的分区数。我知道在使用repartition
创建dataframe
之后我们可以df.repartition
。但是,最初创建dataframe
时默认生成的分区数是多少?
我理解sc.parallelize
和其他一些转换会根据spark.default.parallelism
生成分区数。但是dataframe
呢?我看到一些答案说设置spark.sql.shuffle.partitions
在执行像join这样的shuffle操作时产生了设定的分区数。这是否在创建数据帧时给出初始分区数?
然后我也看到了一些答案,解释了通过设置
生成的分区数量mapred.min.split.size.
mapred.max.split.size and
hadoop block size
然后,当我尝试实际操作时,我将1000万条记录读入一个带有2个执行器和每个执行器4个内核的spark-shell中的数据帧中。当我df.rdd.getNumPartitions
时,我得到了值1
。我如何得到1分区数?不是2
最小分区数?
当我对dataframe
进行统计时,我发现有200个任务正在启动。这是由于spark.sql.shuffle.partitions
设置吗?
我完全糊涂了!有人可以回答我的问题吗?任何帮助,将不胜感激。谢谢!