在 Python 中比较和生成 Parquet 文件
Comparing and Generating Parquet Files in Python
我希望你能帮助我,因为我目前被困住了。
所以,我接到了将几个 csv 文件转换为 parquet 格式的任务。这些 parquet 文件将用作要处理的另一个脚本的输入。
另一位工程师创建了转换脚本,但我现在的雇主不知何故没有它,现在该工程师已经离开了公司。所以他们让我创建另一个转换脚本。
我尝试创建转换脚本,但处理脚本不接受结果,因为它不断抛出错误。但是当我使用由以前的工程师转换脚本创建的旧镶木地板文件之一时,处理脚本 运行 完美。
我有 csv 格式和 parquet 格式的数据。所以我的目标是创建一个转换脚本,当以 csv 格式执行时,可以生成相同的 parquet 格式文件。
我的问题:
- 如何将当前脚本生成的镶木地板文件与正确的镶木地板文件进行比较,以便找出差异。
- 是否可以对 parquet 文件进行逆向工程以了解之前的脚本是如何进行转换的?
仅供参考,处理脚本抛出的错误主要是因为我当前脚本生成的镶木地板文件没有在列上使用预期的数据类型。
任何输入将不胜感激!
您需要检查 parquet 文件的 schema 和 metadata。
模式在数据类型信息方面特别有用。
编辑:考虑pyarrow
模块:
import pyarrow.parquet as pq
import json
import pandas as pd
# load legacy parquet file
old_tbl = pq.read_table('old_file.parquet')
# get the metadata key
print(old_tbl.schema.metadata.keys())
# let's say the result was b'pandas'...
# create a dictionary with metadata information
old_info = json.loads(old_tbl.schema.metadata[b'pandas'].decode('utf-8'))
# get the metadata field names
print(old_info.keys())
# finally, inspect each metadata field
# p.e. column types
print(pd.DataFrame(old_info['columns']))
# p.e. pandas version used by him
print(old_dict['pandas_version'])
# p.e. pyarrow version used by him (assuming he used it too)
print(old_dict['creator'])
# and so on
利用所有这些信息,您可以创建新的 parquet 文件,其中包含进程预期的数据类型。
我希望你能帮助我,因为我目前被困住了。
所以,我接到了将几个 csv 文件转换为 parquet 格式的任务。这些 parquet 文件将用作要处理的另一个脚本的输入。
另一位工程师创建了转换脚本,但我现在的雇主不知何故没有它,现在该工程师已经离开了公司。所以他们让我创建另一个转换脚本。
我尝试创建转换脚本,但处理脚本不接受结果,因为它不断抛出错误。但是当我使用由以前的工程师转换脚本创建的旧镶木地板文件之一时,处理脚本 运行 完美。
我有 csv 格式和 parquet 格式的数据。所以我的目标是创建一个转换脚本,当以 csv 格式执行时,可以生成相同的 parquet 格式文件。
我的问题:
- 如何将当前脚本生成的镶木地板文件与正确的镶木地板文件进行比较,以便找出差异。
- 是否可以对 parquet 文件进行逆向工程以了解之前的脚本是如何进行转换的?
仅供参考,处理脚本抛出的错误主要是因为我当前脚本生成的镶木地板文件没有在列上使用预期的数据类型。
任何输入将不胜感激!
您需要检查 parquet 文件的 schema 和 metadata。
模式在数据类型信息方面特别有用。
编辑:考虑pyarrow
模块:
import pyarrow.parquet as pq
import json
import pandas as pd
# load legacy parquet file
old_tbl = pq.read_table('old_file.parquet')
# get the metadata key
print(old_tbl.schema.metadata.keys())
# let's say the result was b'pandas'...
# create a dictionary with metadata information
old_info = json.loads(old_tbl.schema.metadata[b'pandas'].decode('utf-8'))
# get the metadata field names
print(old_info.keys())
# finally, inspect each metadata field
# p.e. column types
print(pd.DataFrame(old_info['columns']))
# p.e. pandas version used by him
print(old_dict['pandas_version'])
# p.e. pyarrow version used by him (assuming he used it too)
print(old_dict['creator'])
# and so on
利用所有这些信息,您可以创建新的 parquet 文件,其中包含进程预期的数据类型。