【问题标题】:Dataframe not displaying correct schema for a folder path数据框未显示文件夹路径的正确架构
【发布时间】:2021-05-14 16:30:49
【问题描述】:

我在 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)

读取单个文件时的架构:

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)
文件夹路径的架构中缺少

content_definitionName。任何帮助都将不胜感激,以了解为什么/如何获得与单个文件架构相同的文件夹架构。

【问题讨论】:

    标签: apache-spark amazon-s3 pyspark apache-spark-sql


    【解决方案1】:

    您可能有一些包含不同架构的镶木地板文件。见Parquet schema merging

    与 Protocol Buffer、Avro 和 Thrift 一样,Parquet 也支持模式 进化。用户可以从一个简单的模式开始,逐步添加 根据需要向架构添加更多列。这样,用户最终可能会 具有不同但相互兼容的多个 Parquet 文件 模式。 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/")
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多