【问题标题】:How to read parquet files in pyspark from s3 bucket whose path is partially unpredictable?如何从路径部分不可预测的 s3 存储桶中读取 pyspark 中的镶木地板文件?
【发布时间】:2022-01-04 13:22:41
【问题描述】:

我的路径格式为s3://my_bucket/timestamp=yyyy-mm-dd HH:MM:SS/

例如s3://my-bucket/timestamp=2021-12-12 12:19:27/,但是 MM:SS 部分是不可预测的,我有兴趣阅读给定小时的数据。我尝试了以下方法:

  1. df = spark.read.parquet("s3://my-bucket/timestamp=2021-12-12 12:*:*/")
  2. df = spark.read.parquet("s3://my-bucket/timestamp=2021-12-12 12:[00,01-59]:[00,01-59]/")

但他们给出了错误pyspark.sql.utils.IllegalArgumentException: java.net.URISyntaxException

【问题讨论】:

    标签: apache-spark amazon-s3 wildcard parquet


    【解决方案1】:

    问题是您的路径包含冒号:。不幸的是,它仍然不受支持。以下是一些相关的门票:

    和线程:

    我认为唯一的方法是重命名这些文件...

    【讨论】:

      【解决方案2】:

      如果你想要性能.....

      我谦虚地建议,当您重新架构时,不要使用 S3 文件列表/目录列表来完成此操作。我建议您使用按小时分区的 Hive 表。 (或者你写一个作业来帮助将数据迁移到大文件而不是小文件中的小时。)

      S3 是用于长期廉价存储的出色引擎。它的性能不高,而且由于它们的实现方式,它在目录列表方面特别糟糕。 (如果目录中有多个小文件,性能只会变得更差)。

      要从您的工作中获得一些真正的性能,您应该使用配置单元表(已分区,因此文件查找在 DynamoDB 中完成,并且分区是小时级别的。)或其他一些减少文件计数/目录的修饰文件结构需要列表。

      如果您可以在不使用文件列表的情况下将数据重组为更大的文件,您将看到性能大幅提升。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-06
        • 1970-01-01
        • 1970-01-01
        • 2022-06-16
        • 2017-01-22
        • 2021-10-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多