【问题标题】:Spark avoiding small partitionsSpark 避免小分区
【发布时间】:2018-04-08 14:12:08
【问题描述】:

我有一个用户“表”,我想按“位置”进行分区。但是在尝试使用时:

usersNewDf.write.partitionBy("location") \
    .parquet("....../parquet/users.parquet")

我得到了很多“尝试*”文件,我想我在某个地方看到了可能是因为我有太多的小分区?检查时似乎是正确的。许多位置只有 1 个用户。所以我想为那些用户清除位置。

我想知道,这是最好的方法吗?是否可以在不清除不常见位置的情况下按位置进行分区?就像如果分区太小,将它们分组?

如果我要清除不常见的位置,我可能会有大量没有位置的用户,所以 1 个大分区。这个可以吗?或者我能做些什么来改善这种情况?


在这种情况下我还应该使用partitionByrepartition 吗?

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    你应该在 write.partitionBy("location") 之前 repartition("location") 否则多个工作分区(在数据洗牌之后)将写入同一个文件分区

    【讨论】:

    • 哦,这就是我得到大量小文件的原因吗? imgur.com/a/zStckimgur.com/TxYdid9
    • 是的 - 相同的位置可以分散在整个集群中,每个写入器创建自己的“部分”文件 - 如果你先重新分区,你只会得到一个
    猜你喜欢
    • 2019-05-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-15
    • 2012-07-02
    • 1970-01-01
    • 1970-01-01
    • 2017-05-19
    • 2018-03-21
    相关资源
    最近更新 更多