Dask read_json元数据不匹配

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

我正在尝试将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_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引擎函数并删除/添加必要的列,以便meta将匹配此函数返回的内容
  • 示例:
  • 您有一个特定的不相关列,它会导致代码错误:
  • 在本例中,您只需从meta中删除此列,并将其放入
    json\u engine()
    包装器中即可

  • 您有一些相关列,这些列在某些分区中报告丢失。在这种情况下,您会遇到与主题启动程序类似的错误 在本例中,您可以使用必要的类型向meta添加必要的列(顺便说一句,meta在本例中只是空的dataframe),如果需要,您还可以在
    json\u engine()
    包装器中将这些列添加为空


    另外,请查看要回答的评论中的建议-改用dask.bag| Column | Found | Expected | | x22 | - | object |