我有一个扁平的镶木地板文件,在其中一个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...
以下是需要翻译的内容:
- 这种方法可行吗?有没有更好的优化方式?在字典、数据框和pa表格之间进行的所有转换都不太高效,所以我很乐意在这里学习。
- 如何在进行字典 -> 数据框转换时保留嵌套结构?还是根本不需要保留嵌套结构?
- 写入嵌套parquet文件的最佳方法是什么?我已经阅读了Nested data in Parquet with Python,并在其中提到了快速parquet用于读取,但缺乏写入能力-现在有没有可行的解决方案?