Pyspark:从路径读取多个 JSON 文件

Posted

技术标签:

【中文标题】Pyspark:从路径读取多个 JSON 文件【英文标题】:Pyspark: reading multiple JSON files from path 【发布时间】:2021-07-23 16:43:08 【问题描述】:

我正在尝试从路径中读取 20 个 JSON 文件并创建一个数据框,但即使创建了架构,df 也只包含空值(“查询未返回结果”)。这是我的代码:

ordersJsonPath = "dbfs:/user/xyz/dbacademy/raw/orders/stream" 
ordersDF = spark.read.schema(userDefinedSchema).json(ordersJsonPath)

当我使用特定的 JSON 文件运行代码时,它可以工作。

"dbfs:/user/xyz/dbacademy/raw/orders/stream/order_0612a18b-0cc7-43ea-9f5b-155aad967cb9_2020-01-01.json"

据我了解,在使用 JSON 时我需要手动创建架构,还是我在这里混淆了一些东西,并且在使用多个文件时手动架构已过时?

提前谢谢你!

编辑:我检查了路径中前 5 个文件的架构,它们都是相同的,它们都可以被我编写的查询读取(虽然不是流式传输,因为这需要将整个路径作为输入) .当我启动 readStream 查询时,甚至前 5 个 JSON 文件都没有得到处理。什么也没发生:

另一个编辑:我解决了,需要在路径中添加 /* ...

【问题讨论】:

您是否确保所有文件的架构都相同?通常,当您有架构差异时会发生这种情况。提供架构不是强制性的,但是如果您希望正确推断您的数据以正确地推断您想要的数据格式,那么您可以提供架构 嗨,菲利克斯,感谢您的回复。这是针对我正在做的一些数据块认证,文件的路径实际上是作为说明的一部分提供给我的。特别奇怪的是,我刚刚开始流式传输(读取和写入)查询,并且第一个文件“意外”写入目标表中。但是当我再次运行代码时,什么也没有发生。 当我离开 uderDefinedSchema 时,我收到一条错误消息:“无法推断 JSON at 的模式。必须手动指定;” 也可以试试json(<your path>, multiLine=True)。以上错误表明您的文件具有不同的架构。 嗨,菲利克斯,再次感谢您的帮助。在我检查了路径中文件的架构(至少是前 5 个)之后,我在最初的帖子中添加了更多信息 【参考方案1】:

解决了,需要在路径中添加 /* ...

【讨论】:

以上是关于Pyspark:从路径读取多个 JSON 文件的主要内容,如果未能解决你的问题,请参考以下文章

PySpark 从目录中读取多个 txt 文件为 json 格式

Databricks 上的 PySpark 在绝对 URI 中获取相对路径:尝试使用 DateStamps 读取 Json 文件时

PySpark 无法从 hdfs 读取 csv:HiveExternalCatalog 错误

PySpark:在 Spark 数据框中读取多个 XML 文件(s3 路径列表)

无法使用本地 PySpark 从 S3 读取 json 文件

Pyspark:获取HDFS路径上的文件/目录列表