如何在读取前根据定义的模式读取 pyspark 中的镶木地板文件?

Posted

技术标签:

【中文标题】如何在读取前根据定义的模式读取 pyspark 中的镶木地板文件?【英文标题】:how to read parquet files in pyspark as per the defined schema before read? 【发布时间】:2021-01-12 06:07:49 【问题描述】:

我正在从 pyspark 的 s3 存储桶中完全读取镶木地板文件。有一些镶木地板文件具有不同的架构,这会导致作业错误。我想传递预定义的架构和火花作业应该只读取与预定义的 scehma 匹配的文件。

data = spark.read.parquet(*path_list)

parquet spark read 命令正在批量读取文件。怎么可能只读取传递预定义模式的镶木地板文件,并且只有那些与传递的模式匹配的镶木地板文件才应该被读取。限制是我需要通过批量加载来实现这一点,这意味着将文件列表 ( path_list ) 传递给 spark read parquet 命令。

【问题讨论】:

【参考方案1】:

您可以尝试这样的方法来使其工作。首先读取数据框中的所有文件,然后从您已读取的现有数据框中选择您需要的列,并根据值过滤掉行。

data = spark.read.option("mergeSchema", "true").parquet("data/")
selectedData = data.select("column1","column2",,).filter("column1".isNotNull)

我认为执行上述步骤可以让你动起来。

【讨论】:

以上是关于如何在读取前根据定义的模式读取 pyspark 中的镶木地板文件?的主要内容,如果未能解决你的问题,请参考以下文章

如何从 PySpark 中的数据框中获取模式定义?

使用 pyspark 读取多个 csv 文件

在 PySpark 中定义 JSON 模式结构的配置文件

使用 pyspark 中 json 文件中的模式读取固定宽度文件

使用 PySpark 在本地模式下读取文件时出现 OutOfMemoryError

PySpark如何读取具有多种编码的字符串的文件