当将多个拼花文件读入数据帧时,它似乎会在之后对每个拼花文件进行评估,以便进行后续转换,而此时它应该对数据帧进行评估。
我正在使用pyspark在一个织物笔记本内工作。我试图将多个拼花文件读入一个数据帧中。每个拼花文件的列数相同,但列模式可能不同,例如,一个名为“adjustment”的列可能是int类型,但如果留空,则键入string。我目前正在将文件读入我的数据帧
df = spark.read.schema(schema).parquet(*files).withColumn(
"file_name", split(input_file_name(), "/").getItem(8)
)
在这里,我指定了一个模式,文件是我想从湖中加载的文件的文件路径列表。File_name只是其中包含日期的文件的名称。
当我奔跑时
display(df.where(col("file_name").contains("2024-10-01")))
它似乎很好地显示了数据帧,类似于display(df),但当我运行时
display(df.where(col("file_name").contains("2024-12-01")))
它给了我这个错误
org.apache.spark.SparkException: Parquet column cannot be converted in file abfss://[email protected]/lakehouse/path/to/my/data/Data_2024-12-01. Column: [data.adjustment], Expected: string, Found: INT64.
我曾尝试指定模式,我曾尝试.cache()或.persist()数据帧,但每次都会出现此错误。我认为这与懒惰的评估有关,但我只是想不出除了分别读取每个拼花文件,然后在对每一列执行模式更改后对其进行联合之外还能做什么。提前感谢您的帮助