使用 parquet 格式时是不是保存了 DataFrame 架构?

Posted

技术标签:

【中文标题】使用 parquet 格式时是不是保存了 DataFrame 架构?【英文标题】:Is DataFrame schema saved when using parquet format?使用 parquet 格式时是否保存了 DataFrame 架构? 【发布时间】:2017-12-12 07:45:53 【问题描述】:

如果调用df.write.parquet(destination),DataFrame 架构(即StructType 信息)是否与数据一起保存?

如果 parquet 文件是由 Spark 以外的其他程序生成的,sqlContext.read.parquet 如何找出 DataFrame 的架构?

【问题讨论】:

【参考方案1】:

Parquet 文件在保存时会自动保留原始数据的架构。因此,如果是 Spark 或其他写入/读取数据的系统,则没有区别。


如果保存时使用一列或多列对数据进行分区,则这些列的数据类型会丢失(因为信息存储在文件结构中)。这些数据类型可以由 Spark 在读取时自动推断(目前仅支持数值数据类型和字符串)。

可以通过将 spark.sql.sources.partitionColumnTypeInference.enabled 设置为 false 来关闭此自动推理,这将使这些列被读取为字符串。如需更多信息,请参阅here。

【讨论】:

如果数据集为空则不会。如果数据集为空,有没有办法保存架构? @Midiparse:这是一个已知问题,似乎已在 Spark 版本 2.4.0 中修复。在此处链接到 JIRA 问题 + 可能的解决方法:***.com/questions/49821408/…

以上是关于使用 parquet 格式时是不是保存了 DataFrame 架构?的主要内容,如果未能解决你的问题,请参考以下文章

以 parquet 格式保存数据帧会生成太多小文件

使用 Apache Parquet 的第一步输入错误

从多个火花工人以镶木地板格式保存

Kafka Connect:读取 JSON 序列化的 Kafka 消息,转换为 Parquet 格式并保存在 S3 中

使用 sparkSession.createDataFrame 以 parquet 格式一次将多行写入 s3

保存 pd.DataFrame 时如何强制 parquet dtypes?