首先免责声明:我对这两个主题(python 和镶木地板)都很陌生,所以如果我的想法很复杂,请与我联系。
我正在寻找有关如何以最有效的方式最好地完成以下转换的一些指导:
我有一个平面 parquet 文件,其中一个 varchar 列将 JSON 数据存储为字符串,我想将此数据转换为嵌套结构,即 JSON 数据变为嵌套 parquet。如果这有任何帮助,我会提前知道 JSON 的模式。
到目前为止,这是我“完成”的事情:
构建样本数据
# load packages
import pandas as pd
import json
import pyarrow as pa
import pyarrow.parquet as pq
# Create dummy data
# dummy data with JSON as string
person_data = {'Name': ['Bob'],
'Age': [25],
'languages': "{'mother_language': 'English', 'other_languages': ['German', 'French']}"
}
# from dict to panda df
person_df = pd.DataFrame.from_dict(person_data)
# from panda df to pyarrow table
person_pat = pa.Table.from_pandas(person_df)
# save as parquet file
pq.write_table(person_pat, 'output/example.parquet')
剧本提案
# load dummy data
sample = pa.parquet.read_table('output/example.parquet')
# transform to dict
sample_dict = sample.to_pydict()
# print with indent for checking
print(json.dumps(sample_dict, sort_keys=True, indent=4))
# load json from string and replace string
sample_dict['languages'] = json.loads(str(sample_dict['languages']))
print(json.dumps(sample_dict, sort_keys=True, indent=4))
#type(sample_dict['languages'])
# how to keep the nested structure when going from dict —> panda df —> pyarrow table?
# save dict as nested parquet...
所以,我这里是我的具体问题:
- 这种方法是可行的方法还是可以以任何方式进行优化?dict、df 和 pa table 之间的所有转换都感觉效率不高,很高兴在这里接受教育。
- 执行 dict 时如何保留嵌套结构 —> df变换?或者这根本不需要?
- 编写嵌套拼花文件的最佳方法是什么?我已经用 Python 阅读了 Parquet 中的嵌套数据,这里提到了快速 Parquet 以供阅读,但缺乏写作能力 - 同时有任何可行的解决方案吗?
非常感谢斯蒂芬