【问题标题】:How many partitions Spark creates when loading a Hive tableSpark 在加载 Hive 表时创建了多少个分区
【发布时间】:2020-07-14 10:33:42
【问题描述】:

即使是 Hive 表或 HDFS 文件,当 Spark 读取数据并创建数据帧时,我认为 RDD/数据帧中的分区数将等于 HDFS 中的零件文件数。但是当我对 Hive 外部表进行测试时,我可以看到该数字与零件文件的数量不同。数据框中的分区数为 119。该表是一个 Hive 分区表,其中包含 150 个零件文件,文件的最小大小为 30 MB,最大大小为 118 MB。那么是什么决定了分区的数量呢?

【问题讨论】:

    标签: apache-spark hadoop pyspark apache-spark-sql


    【解决方案1】:

    您可以通过设置spark.sql.files.maxPartitionBytes 来控制 Spark 打包到单个分区中的字节数。默认值为 128 MB,请参阅Spark Tuning

    【讨论】:

    • 那个配置属性是正确的,我的问题是为什么有150个分区而只有119个?
    • 因为可以将多个小 (Spark 分区(拆分)。
    • 我提供了 Spark 文档的链接,其余的可以google。
    【解决方案2】:

    每个块的块大小为128MB。 Spark 将读取数据。 假设您的 Hive 表大小约为 14.8 GB,那么它将 Hive 表数据划分为 128 MB 块,并产生 119 个分区。

    另一方面,您的 hive 表已分区,因此分区列有 150 个唯一值。

    因此,hive 中的部分文件数和 spark 中的分区数没有关联。

    【讨论】:

    • 在我的 hive 表中,实际上只有 3 个分区。每个分区包含 50 个部分文件
    • 这意味着,您进行分区的列有 3 个唯一值,每个值下有 50 条记录。但这种分区完全独立于火花分区。
    【解决方案3】:

    我认为这个链接确实回答了我的问题。分区的数量取决于拆分的数量,拆分取决于 hadoop 输入格式。 https://intellipaat.com/community/7671/how-does-spark-partition-ing-work-on-files-in-hdfs

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 1970-01-01
      • 2016-07-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多