【问题标题】:Why 7 partitions are being determined by Spark?为什么 Spark 确定了 7 个分区?
【发布时间】:2020-02-24 18:22:59
【问题描述】:

我有一个包含 5 个文件的 parquet 目录,如下所示:

我正在使用 Spark 2.2 版本并使用以下代码阅读此目录:

我不清楚为什么 Parquet 目录中有 5 个文件(每个文件都小于块大小)时 Spark 会确定 7 个分区(alternateDF.rdd().getNumPartitions())? 5 个任务有输入记录,但最后 2 个任务有 0 个输入记录,但输入数据非零。你能解释一下每个任务的行为吗?

【问题讨论】:

    标签: apache-spark apache-spark-sql parquet hortonworks-data-platform


    【解决方案1】:

    @阿曼,

    你可以关注一个老问题link

    简单地说,以下是计算分区数所依赖的 3 个参数(来自上面的链接)

    • spark.default.parallelism(大致翻译为#cores 可用于 应用程序)
    • spark.sql.files.maxPartitionBytes(默认 128MB)
    • spark.sql.files.openCostInBytes(默认 4MB)

    Spark 源代码到refer

    【讨论】:

    • 感谢您的回复,但我无法从上述逻辑中获得此号码。为了进一步简化问题,我尝试使用 CSV 文件作为 spark.read 函数的输入。观察 - CSV 目录中的 5 个文件(每个文件大小约为 40 MB)给了我 10 个分区 CSV 目录中的 3 个文件(每个文件大小约为 60 MB)给了我 9 个分区 无法理解这种 Spark 行为
    • spark.default.parallelism 为 8,spark.sql.files.maxPartitionBytes 为 128MB
    • 您是否仅使用一个大文件进行了测试并看到了相同的行为?还是只发生在多个小于 128MB 的文件上?
    • 我确实读过一个 233 MB 大小的 CSV 文件,它给了我 2 个分区。但是当我加载小文件时,它会给我上一条评论中提到的不同数量的分区。我的问题更多关于小文件分区。它们是如何精确计算的?
    猜你喜欢
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    • 2015-09-29
    • 1970-01-01
    • 2017-04-05
    • 2019-11-13
    • 2018-08-09
    • 2018-11-14
    相关资源
    最近更新 更多