dask:当convert-string = False时,read_json中的数据类型不匹配

问题描述 投票:0回答:1

当使用 dask 读取包含复杂字段的 JSON 行文件时,我无法获取正确的数据类型。

JSON 行文件如下所示

{"col1": "some text", "col2": ["a", "b", "c"]}

我将

dataframe.convert-string
设置为
False
以使 dask 将第二列读取为字符串列表(请参阅此评论)。但是,这为我提供了两列的数据类型
object
。如果我提供显式数据类型(如上面链接中的建议),它将失败并出现元数据不匹配错误。如何将数据类型正确设置为字符串(对于字符串)和对象(对于复杂列)?或者两列都是对象类型可以吗?

import dask.dataframe as dd
from dask import config

df = dd.read_json('df.jsonl', orient='records', lines=True)
df.dtypes
# col1    string[pyarrow]
# col2    string[pyarrow]    ## WRONG!
# dtype: object

config.set({'dataframe.convert-string': False})

df = dd.read_json('df.jsonl', orient='records', lines=True)
df.dtypes
# col1    object
# col2    object
# dtype: object

df = dd.read_json('df.jsonl', orient='records', lines=True,
                  metadata={'col1': 'string[pyarrow]',
                            'col2': 'object'})
df.dtypes
# col1    string[pyarrow]
# col2             object
# dtype: object

df.head()
# ValueError: Metadata mismatch found in `from_delayed`.
python dask
1个回答
0
投票

如果您的列可以包含列表或字典等数据结构,那么使用对象数据类型是合适的。如果这导致问题,请在加载数据后将列转换为所需的数据类型。

此外,您在读取 DataFrame 后将 dataframe.convert-string 设置为 False,但为时已晚。您应该在读取 JSON 文件之前设置此配置。

© www.soinside.com 2019 - 2024. All rights reserved.