在Azure Databricks中读取Parquet文件自定义元数据失败
读取Parquet文件级自定义元数据的正确方法
你当前的代码里,printSchema()只会输出DataFrame的数据列结构,也就是Parquet文件存储的表字段信息,和文件本身的自定义元数据完全无关,所以读不到是正常的。要获取文件级的自定义元数据,可使用以下两种方法:
方法一:用Databricks的dbutils工具(简单直接)
storageaccount = 'zzzzzz' containername = 'yyyyy' access_key = 'xxxx' spark.conf.set(f'fs.azure.account.key.{storageaccount}.blob.core.windows.net', access_key) path = f"wasbs://{containername}@{storageaccount}.blob.core.windows.net/generated_example_10m.parquet" # 获取文件基础信息(路径、大小等) file_basic_info = dbutils.fs.ls(path)[0] print("文件基础信息:", file_basic_info) # 获取文件的自定义元数据 file_metadata = dbutils.fs.head(path, 0).getMetadata() print("文件级自定义元数据:", file_metadata)
dbutils.fs.head(path, 0)会读取文件头信息,通过getMetadata()就能拿到你设置的自定义键值对。
方法二:用PyArrow直接解析Parquet文件(通用Spark环境适用)
如果需要更灵活的元数据处理,或者在非Databricks的Spark环境中,用PyArrow是更可靠的方式:
storageaccount = 'zzzzzz' containername = 'yyyyy' access_key = 'xxxx' spark.conf.set(f'fs.azure.account.key.{storageaccount}.blob.core.windows.net', access_key) import pyarrow.parquet as pq from pyarrow.fs import AzureBlobFileSystem # 初始化Azure Blob文件系统连接 fs = AzureBlobFileSystem(account_name=storageaccount, account_key=access_key) # 打开目标Parquet文件 file_path = f"{containername}/generated_example_10m.parquet" with fs.open_input_file(file_path) as file_stream: parquet_file = pq.ParquetFile(file_stream) # 获取完整文件元数据 full_metadata = parquet_file.metadata # 提取自定义元数据(默认是字节类型,转成字符串) custom_metadata = {k.decode('utf-8'): v.decode('utf-8') for k, v in full_metadata.metadata.items()} print("文件级自定义元数据:", custom_metadata)
PyArrow会直接解析Parquet文件的元数据块,包括你添加的自定义内容,结果是键值对形式的字典。
内容的提问来源于stack exchange,提问作者Korenaga
相关产品推荐
相关产品推荐

