数据框架没有显示文件夹路径的正确架构



我在S3桶中有一些Snappy压缩Parquet文件,并使用Pyspark,我试图读取文件的数据并打印其模式。但是当我从文件夹路径读取时,模式与单个文件的模式不同。

文件夹路径架构:

df = spark.read.parquet("s3://bucket_name/rds-aurora/core/")
df.printSchema()
root
|-- rid: long (nullable = true)
|-- id: string (nullable = true)
|-- revision: integer (nullable = true)
|-- type: integer (nullable = true)
|-- content_dataType: long (nullable = true)

读取单个文件时的Schema:

df = spark.read.parquet("s3://bucket_name/rds-aurora/core/part-00008-c000.snappy.parquet")
df.printSchema()
root
|-- rid: long (nullable = true)
|-- id: string (nullable = true)
|-- revision: integer (nullable = true)
|-- type: integer (nullable = true)
|-- content_dataType: long (nullable = true)
|-- content_definitionName: string (nullable = true)
<<p>列strong> content_definitionName 文件夹路径的架构中缺少。任何帮助将不胜感激,找出为什么/如何我可以得到文件夹架构相同的单个文件架构。

很可能您有一些包含不同模式的拼花文件。参见Parquet模式合并:

和Protocol Buffer、Avro、Thrift一样,Parquet也支持schema进化。用户可以从一个简单的模式开始,然后逐渐添加根据需要向模式添加更多列。这样,用户最终可能会具有多个不同但相互兼容的拼花文件模式。Parquet数据源现在能够自动检测在这种情况下合并所有这些文件的模式。

[…我们从1.5.0开始默认关闭了它。你可以启用通过

  1. 在读取Parquet文件时将数据源选项mergeSchema设置为true(如下面的示例所示),或者
  2. 设置全局SQL选项spark.sql.parquet.mergeSchema为true

尝试添加选项mergeSchema时,从文件夹路径读取:

spark.read.option("mergeSchema", "true").parquet("s3://bucket_name/rds-aurora/core/")

最新更新