Azure流分析生成Parquet文件遇pyarrow 'Malformed levels'错误求助
解决PyArrow读取Azure Stream Analytics生成的Parquet文件时的"Malformed levels"错误
错误原因分析
这个错误源于Azure Stream Analytics(ASA)生成的Parquet文件中,嵌套重复字段的层级编码不符合PyArrow的Parquet规范。从你提供的Schema来看,hierarchy字段包含多层嵌套的children List结构,ASA在处理这类深度嵌套数组时,可能错误生成了超出Schema定义的层级标记,导致PyArrow读取时判定数据损坏。
解决方案
1. 校验Parquet文件的实际Schema
先用PyArrow查看文件元数据,确认实际Schema与预期是否一致:
import pyarrow.parquet as pq parquet_file = pq.ParquetFile("problematic_file.parquet") print(parquet_file.metadata.schema)
重点对比多层children List的层级定义、可选/重复字段标记是否与你提供的PyArrow生成Schema匹配。
2. 强制ASA使用指定Schema输出
避免ASA自动推断Schema导致的不一致,在ASA输出配置中手动定义Parquet Schema,明确嵌套List的层级和字段类型,确保与PyArrow兼容,尤其是多层children结构的List类型标记。
3. 使用替代库读取并修复损坏文件
如果无法重新生成文件,尝试用fastparquet读取(它对非标准Parquet兼容性更好):
import fastparquet df = fastparquet.ParquetFile("problematic_file.parquet").to_pandas()
读取后可重新用PyArrow写入标准Parquet格式完成修复:
import pyarrow as pa import pyarrow.parquet as pq table = pa.Table.from_pandas(df) pq.write_table(table, "fixed_file.parquet")
4. 标准化原始JSON数据
部分文件出错可能是因为原始JSON中存在嵌套深度超出预期的记录。检查对应原始JSON,过滤或修复嵌套层级不一致的记录,确保所有数据结构符合Schema定义后再通过ASA转换。
内容的提问来源于stack exchange,提问作者Kiva
相关产品推荐
相关产品推荐

