nag*_*dra 22 hive partitioning apache-spark apache-spark-sql
我需要使用Spark SQL从Hive表加载数据HiveContext并加载到HDFS中.默认情况下,DataFramefrom SQL输出有2个分区.为了获得更多的并行性,我需要更多的SQL分区.HiveContext中没有重载方法来获取分区数参数.
RDD的重新分区导致改组并导致更多的处理时间.
>
val result = sqlContext.sql("select * from bt_st_ent")
Run Code Online (Sandbox Code Playgroud)
有日志输出:
Starting task 0.0 in stage 131.0 (TID 297, aster1.com, partition 0,NODE_LOCAL, 2203 bytes)
Starting task 1.0 in stage 131.0 (TID 298, aster1.com, partition 1,NODE_LOCAL, 2204 bytes)
Run Code Online (Sandbox Code Playgroud)
我想知道有没有办法增加SQL输出的分区大小.
use*_*411 15
Spark <2.0:
您可以使用Hadoop配置选项:
mapred.min.split.size.mapred.max.split.size以及HDFS块大小来控制基于文件系统的格式的分区大小*.
val minSplit: Int = ???
val maxSplit: Int = ???
sc.hadoopConfiguration.setInt("mapred.min.split.size", minSplit)
sc.hadoopConfiguration.setInt("mapred.max.split.size", maxSplit)
Run Code Online (Sandbox Code Playgroud)
Spark 2.0+:
您可以使用spark.sql.files.maxPartitionBytes配置:
spark.conf.set("spark.sql.files.maxPartitionBytes", maxSplit)
Run Code Online (Sandbox Code Playgroud)
在这两种情况下,特定数据源API可能都没有使用这些值,因此您应始终检查所使用格式的文档/实现详细信息.
*其他输入格式可以使用不同的设置.例如,参见
另外Datasets创建的RDDs将继承父母的分区布局.
类似地,分段表将使用在Metastore中定义的桶布局,桶和Dataset分区之间具有1:1的关系.