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")
我正在尝试从分区文件夹加载 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")