【问题标题】:How does Spark repartitioning work w.r.t to the input file partitioning?Spark 重新分区如何对输入文件分区起作用?
【发布时间】:2021-07-20 18:57:07
【问题描述】:

我有两个问题:

  1. 我们可以在调用coalesce 时设置比HDFS 块大小更少的分区吗?例如假设我的文件大小为 1 GB,HDFS 块大小为 128MB,我可以coalesce(1)吗?

  2. 众所周知,HDFS 上的输入文件是根据块大小进行物理分割的。当我们重新分区或更改并行度时,Spark 是否会进一步拆分数据(物理上)?

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    例如,假设我的文件大小为 1 GB,hdfs 块大小为 128MB。我可以合并(1)吗?

    是的,您可以合并到单个文件并将其写入外部文件系统(至少使用 EMRFS)

    当我们重新分区或更改并行度时,Spark 是否会进一步拆分数据(物理上)?

    repartition 将数据分成独立于原始输入文件的分区的分区。

    【讨论】:

    • 克里斯,我的第一个问题是设置的分区数少于总块数
    • 谢谢,我误会了。我现在修改了答案。
    • 谢谢克里斯。我还有一个困惑。虽然 spark.sql.shuffle.partition 设置为 200,但每当我加入时,我总是会在 hdfs/s3 中获得随机数量的部分文件。它永远不会等于 200。虽然文档说 suffle.partition 决定了随机操作后的分区数(如加入)
    • 从文档中不清楚默认情况下 DataFrameWriter 写入存储的数据帧是如何分割成部分文件的。但是,您可以使用 partitionBy、coalesce 和 repartition 函数来控制它。 stackoverflow.com/questions/44878294/… 可以帮到你。
    • 在 spark 的分区数等于输入拆分。我有一个 5MB 的文件,当我将其读取为 RDD 并将默认并行度设置为 2 时,我看到分区数为 2。这里的优先级是什么,是 InputSplit 优先于默认并行度吗?
    猜你喜欢
    • 2019-03-02
    • 1970-01-01
    • 2021-02-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2022-08-03
    相关资源
    最近更新 更多