【问题标题】:How to load partitioned parquet dataset with no partition names (in directory names)?如何加载没有分区名称(在目录名称中)的分区镶木地板数据集?
【发布时间】:2021-09-15 01:23:36
【问题描述】:

我有一个 parquet 格式的文件列表

-- s3:\\my-bucket\files\14\09\12\file.pq
-- s3:\\my-bucket\files\14\09\11\file.pq
# 14 = day, 09 = month, 11 = hour.

如果我将绝对路径传递给我的 spark 上下文,它可以毫无问题地读取文件

spark.read.parquet('s3:\\my-bucket\files\14\09\12\file.pq')

如果我进来

spark.read.parquet('s3:\\my-bucket\files\14')

然后我会得到以下错误:

AnalysisException: 'Unable to infer schema for Parquet. It must be specified manually.;'

这是,我相信由于分区未命名,我无法控制源,所以很遗憾我无法更改它。

我的 hacky 解决方法是列出所有文件,然后获取唯一的最低级别路径集并将其传递给 spark 。

有更好的解决方法吗?

【问题讨论】:

    标签: apache-spark pyspark apache-spark-sql


    【解决方案1】:

    更简单的方法是将* 列出路径中的所有目录:

    df = spark.read.parquet('s3://my-bucket/files/*/*/*/')
    

    如果要检索daymonthhourfollow my answer here

    【讨论】:

    • hmm,这会导致另一个错误 - 说对于给定的镶木地板文件找不到这样的文件,尽管当我通过 cli aws s3 ls file_path 检查它时它就在那里。不确定它是否与我上面的错误有关
    • 您的 parquet 文件扩展名是 .pq,但应该是 .parquet。尝试将路径更改为s3://my-bucket/files/*/*/*/*.pq
    • 啊这个错误是由于胶水书签造成的,当尝试读取大量文件时它会很困难。不知道是什么原因造成的,但似乎其他人也有同样的问题。感谢您的帮助!
    猜你喜欢
    • 2018-06-06
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 1970-01-01
    • 2020-09-06
    • 2018-02-12
    • 2021-03-30
    相关资源
    最近更新 更多