Dask read_json元数据不匹配
我正在尝试将json文件加载到dask df中Dask read_json元数据不匹配,dask,Dask,我正在尝试将json文件加载到dask df中 files = glob.glob('**/*.json', recursive=True) df = dd.read_json(files, lines = False) 数据中缺少一些值,并且一些文件有额外的列。 有没有办法指定一个列列表,以便所有可能的列都存在于连接的dask df中? 此外,它不能处理缺少的值吗?我在尝试计算df时遇到以下错误: ValueError: Metadata mismatch found in `from_de
files = glob.glob('**/*.json', recursive=True)
df = dd.read_json(files, lines = False)
数据中缺少一些值,并且一些文件有额外的列。
有没有办法指定一个列列表,以便所有可能的列都存在于连接的dask df中?
此外,它不能处理缺少的值吗?我在尝试计算df时遇到以下错误:
ValueError: Metadata mismatch found in `from_delayed`.
Partition type: `DataFrame`
+-----------------+-------+----------+
| Column | Found | Expected |
+-----------------+-------+----------+
| x22 | - | float64 |
| x21 | - | object |
| x20 | - | float64 |
| x19 | - | float64 |
| x18 | - | object |
| x17 | - | float64 |
| x16 | - | object |
| x15 | - | object |
| x14 | - | object |
| x13 | - | object |
| x12 | - | object |
| x11 | - | object |
| x10 | - | object |
| x9 | - | float64 |
| x8 | - | object |
| x7 | - | object |
| x6 | - | object |
| x5 | - | int64 |
| x4 | - | object |
| x3 | - | float64 |
| x2 | - | object |
| x1 | - | object |
+-----------------+-------+----------+
read_json()
是新的,并且针对同质数据的“常见”情况进行了测试。它可以像read_csv
一样进行扩展,以便相当容易地处理列选择和数据类型强制。我注意到,允许传递dtype=
参数
这不是一个答案,但也许你会有兴趣提交一份公关在?特定的代码保存在文件中。我遇到了类似的问题,并提出了另一个解决方案:
def read_数据(路径,**kwargs):
meta=dd.read_json(路径,**kwargs).head(0)
meta=meta.head(0)
#编辑元数据框以匹配此处读取的内容
def json_引擎(*args,**kwargs):
df=pd.read_json(*args,**kwargs)
#在此处添加或删除必要的列
返回df
返回dd.read_json(路径,meta=meta,engine=json_engine,**kwargs)
所以这个解决方案的想法是你做两件事:
json\u engine()
包装器中即可
json\u engine()
包装器中将这些列添加为空
另外,请查看要回答的评论中的建议-改用dask.bag谢谢,我会考虑的。我也碰到了这个问题,我不确定在哪里我会在源代码中实现列选择。FWIW我认为异构JSON数据与任何其他数据格式一样可能。我想知道我是否应该使用dask dataframes来读取大型json文件(来自Pushshift的注释数据)。对于异构数据,您可能希望使用dask.bag来读取文本、解析json并操作生成的字典。哦,我明白了,我可以使用dask.bag加载,进行一些操作,然后将其转换为数据帧。完成后,也许我可以将此示例添加到dask文档中。谢谢@mdurant
| Column | Found | Expected |
| x22 | - | object |