Pyspark load-csv 不显示新文件的真实模式(仅显示 "infered" 模式)

Pyspark load-csv does not show the real schema of a new file (only the "infered" schema)

我正在尝试从分区文件夹加载 pyspark csv:mnt/data/test/ingestdatetime=20210208/test_20210208.csv

df = spark.read.csv("mnt/data/test")
df = df.filter(df['ingestdatetime'] == '20210208') 

基本上我想看看模式是否与它应该的不同(数据没有headers,所以我无法比较headers)

问题是,每当我在顶层“data/test/”上加载数据时,架构都是根据几行“推断”出来的,它看不到新文件是否有额外的列或太多的列。 ==> 所以我无法比较架构是否不同。

我看到了这个(6 列):

而不是这个(7 列):

我能做到的第一种方法是直接从分区 (data/test/ingestdate=20210208/) 加载数据。但是我会丢失分区键列类型。

我想我也可以将所有内容加载为字符串。

您可以在使用 PySpark 读取时使用 basePath 选项来“保留”输出数据框中的分区列。此选项众所周知但未记录(或 documented only for Parquet 但适用于所有其他来源)

spark.read.option("basePath", "/mnt/data/test").csv("/mnt/data/test/ingestdate=20210208")