在 PySpark 笔记本中读取多个 Parquet 文件

问题描述 投票:0回答:1

将多个镶木地板文件读入数据帧时,似乎会在之后对每个镶木地板文件进行评估以进行后续转换,而此时应该对数据帧进行评估。

我正在使用 pyspark 在织物笔记本内工作。我正在尝试将多个镶木地板文件读入一个数据帧。每个镶木地板文件具有相同的列数,但列模式可能会有所不同,例如,名为“调整”的一列可能是 int 类型,但如果留空则为 string 类型。我目前正在将文件读入我的数据帧中

df = Spark.read.schema(schema).parquet(*files).withColumn( "file_name", split(input_file_name(), "/").getItem(8) ) 我指定的架构和文件是我要从湖加载的文件的文件路径列表。 File_name 只是其中包含日期的文件的名称。

当我跑步时 显示(df.where(col("file_name").contains("2024-10-01"))) 它似乎显示数据框很好,类似于显示(df)但是当我运行时

显示(df.where(col("file_name").contains("2024-12-01"))) 它给了我这个错误

org.apache.spark.SparkException:无法在文件 abfss://[email protected]/lakehouse/path/to/my/data/Data_2024-12-01 中转换 Parquet 列。列:[数据.调整],预期:字符串,发现:INT64。

我尝试指定架构,尝试 .cache() 或 .persist() 数据帧,但每次我都会遇到此错误。我认为这与惰性评估有关,但除了单独读取每个镶木地板文件,然后在对每列强制执行架构更改后将它们联合起来之外,我只是想不出还能做什么。预先感谢您的帮助

apache-spark pyspark databricks parquet microsoft-fabric
1个回答
0
投票

但我只是想不出除了分别读取每个镶木地板文件然后在每列上强制执行架构更改后将它们合并之外还能做什么

是的。 这就是你要做的。 仅当架构匹配时,才能在单个语句中读取多个 parquet 文件。

因此,在 python 中循环文件,将每个文件读入 DataFrame,添加转换以使架构匹配,然后将它们合并到最终的 DataFrame 中。

© www.soinside.com 2019 - 2024. All rights reserved.