【问题标题】:How to change the number of partitions of an RDD with a large local file (non-HDFS file)?如何更改本地大文件(非HDFS文件)的RDD的分区数?
【发布时间】:2021-01-10 06:20:09
【问题描述】:

我有一个 8.9GB 的文本文件,我用它创建了一个 RDD 并将其导入 Spark。

textfile = sc.textFile("input.txt")

Spark 创建的分区数是 279,是输入文件的大小除以 32MB 默认的 HDFS 块大小得到的。我可以将参数传递给文本文件并要求更多数量的分区,但是,不幸的是,我的分区数量不能少于此默认值(例如 4)。

如果我将 4 作为参数传递,Spark 将忽略它并继续处理 279 个分区。

由于我的底层文件系统不是 HDFS,对我来说,将输入大小拆分为太多分区似乎非常低效。如何强制 Spark 使用更少的分区?如何将 Spark 中的默认 HDFS 块大小更改为更大的值?

【问题讨论】:

  • 如果您更改并行度级别,也许您可​​以调整应用程序的性能。默认分区程序读取spark.default.parallelism。尝试通过在配置文件中设置spark.default.parallelism 属性来调整您的分区。该属性在配置文件中的定义是“:用户未设置时由join、reduceByKey和parallelize等转换返回的RDD中的默认分区数。
  • 感谢您的回复。使用默认并行性,您不能低于 Spark 创建的默认分区数。您可以使用该参数来增加超出默认值的分区数。

标签: apache-spark partitioning large-files


【解决方案1】:

在您的情况下,由于块大小为 32mb,因此您将获得 279 个分区。您可以将 HDFS 中的块大小增加到任何其他合适的值,以满足您的要求。您可以在 hdfs-site.xml 中找到块大小参数

【讨论】:

    【解决方案2】:

    我遇到了同样的错误。我已尝试更改以下设置:

    conf.set("spark.hadoop.dfs.block.size", str(min_block_size))
    conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.minsize", str(min_block_size))
    conf.set("spark.hadoop.mapreduce.input.fileinputformat.split.maxsize", str(max_block_size))
    

    它们都没有真正改变输入大小,大小仍然保持 32 MB。然后,意识到我使用的是本地文件系统而不是 HDFS,所以可能这就是它不起作用的原因。我发现了另一个应该与本地文件(我认为)一起使用的配置,如下所示。

    # The maximum number of bytes to pack into a single partition when reading files.
    conf.set("spark.files.maxPartitionBytes", str(min_block_size)) 
    
    

    但是,完全没有效果。我通过添加以下内容尝试了另一项配置更改:

    conf.set("spark.sql.files.maxPartitionBytes", str(sql_block_size))
    

    它改变了数据帧的输入大小,但没有改变 RDD :(.

    如果有人发现任何配置实际上改变了 RDD 的输入大小,我将不胜感激。

    【讨论】:

      【解决方案3】:

      我也尝试了大部分配置,最​​后我使用repartition()

      textfile = sc.textFile("input.txt").repartition(2)
      textfile.getNumPartitions
      
      # result
      2
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-04-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-28
        • 2018-12-07
        相关资源
        最近更新 更多