【问题标题】:s3 parquet write - too many partitions, slow writings3 parquet write - 分区太多,写入速度慢
【发布时间】:2018-10-16 06:58:16
【问题描述】:

我有我的 scala spark 作业要作为 parquet 文件写入 s3。到目前为止,它有 60 亿条记录,并且每天都将继续增长。根据用例,我们的 api 将根据 id 查询 parquet。因此,为了使查询结果更快,我正在编写带有 id 分区的镶木地板。但是,我们有 1330360 个唯一 ID,因此在写入时会创建 1330360 个镶木地板文件,因此写入步骤非常慢,写入过去 9 小时并且仍在运行。

output.write.mode("append").partitionBy("id").parquet("s3a://datalake/db/")

无论如何,我可以减少分区数量并仍然使读取查询更快吗?或者任何其他更好的方法来处理这种情况?谢谢。

编辑:- id 是一个带有随机数的整数列。

【问题讨论】:

    标签: scala apache-spark amazon-s3 amazon-emr parquet


    【解决方案1】:

    您可以按 id 范围进行分区(您没有说明任何有关 id 的内容,所以我无法提出具体建议)和/或使用存储桶而不是分区 https://www.slideshare.net/TejasPatil1/hive-bucketing-in-apache-spark

    【讨论】:

    • 感谢您的帮助。您需要有关 id 的哪些信息?例如?
    • 你能指出我的任何 id 范围的例子吗?或编写一些示例 sn-p 以按 id 范围进行分区?
    • 更新了关于id的问题。
    • @Arnon 您能否提供有关如何按范围分区的任何见解?我在同一条船上,但没有成功找到有关如何将 Id 范围放入分区的文档。在 PySpark 2.3 上
    猜你喜欢
    • 1970-01-01
    • 2017-03-17
    • 2020-10-30
    • 2017-04-30
    • 2019-06-07
    • 2017-01-24
    • 1970-01-01
    • 2012-08-04
    • 1970-01-01
    相关资源
    最近更新 更多