gpt4 book ai didi

apache-spark - 如何在Spark SQL中控制分区大小

转载 作者:行者123 更新时间:2023-12-03 11:41:46 29 4
gpt4 key购买 nike

我需要使用Spark SQL HiveContext从Hive表中加载数据并加载到HDFS中。默认情况下,SQL输出中的DataFrame具有2个分区。为了获得更多的并行性,我需要在SQL中增加分区。 HiveContex t中没有重载方法来获取分区数参数。

RDD的重新分区会导致改组并导致更多的处理时间。

>

val result = sqlContext.sql("select * from bt_st_ent")

具有以下日志输出:
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)

我想知道有什么方法可以增加SQL输出的分区大小。

最佳答案

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)

    Spark 2.0+ :

    您可以使用 spark.sql.files.maxPartitionBytes配置:

    spark.conf.set("spark.sql.files.maxPartitionBytes", maxSplit)

    在这两种情况下,特定的数据源API可能都未使用这些值,因此您应始终检查所使用格式的文档/实现详细信息。

    *其他输入格式可以使用不同的设置。例如看
  • Partitioning in spark while reading from RDBMS via JDBC
  • Difference between mapreduce split and spark paritition

  • 此外,从 Datasets创建的 RDDs将继承其父级的分区布局。

    类似地,存储桶表将使用元存储中定义的存储桶布局,其中存储桶和 Dataset分区之间具有1:1的关系。

    关于apache-spark - 如何在Spark SQL中控制分区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38249624/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com