我读到了镶木地板:
df = spark.read.parquet(file_name)
并获取列:
df.columns
并返回列列表 ['col1', 'col2', 'col3']
我读到 parquet 格式能够在文件中存储一些元数据。
有没有办法存储和读取额外的元数据,例如,附加对每列内容的人工描述?
谢谢。
无法在 Parquet 文件中读取或存储任意附加元数据。
当提到 Parquet 文件中的元数据时,它指的是与字段相关的技术元数据,包括嵌套字段的数量、类型信息、长度信息等。如果您查看 Parquet 文档中的 SchemaElement 类 ( https ://static.javadoc.io/org.apache.parquet/parquet-format/2.6.0/org/apache/parquet/format/SchemaElement.html)您将找到模式中每个字段的所有可用元数据。这不包括字段名称之外的任何人类可读的描述。
可以在此处的“文件格式”部分找到 Parquet 元数据的详细概述 - https://parquet.apache.org/documentation/latest/
自 2024 年和 Spark 3 起,Spark 自动读取和写入 parquet 文件中的列描述。
这是一个使用 PySpark 进行演示的最小示例。 (注释行是程序打印的输出)
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
user_df = spark.sql("SELECT 'John' as first_name, 'Doe' as last_name")
user_df = user_df.withMetadata("first_name", {"comment": "The user's first name"})
user_df = user_df.withMetadata("last_name", {"comment": "The user's last name"})
for field in user_df.schema.fields:
print(field.name, field.metadata)
# first_name {'comment': "The user's first name"}
# last_name {'comment': "The user's last name"}
user_df.write.mode("overwrite").parquet("user")
user_df_2 = spark.read.parquet("user")
for field in user_df_2.schema.fields:
print(field.name, field.metadata)
# first_name {'comment': "The user's first name"}
# last_name {'comment': "The user's last name"}