json - Dask 如何使用字典列表打开 json
问题描述
我正在尝试使用以下方法打开一堆 JSON 文件read_json
以获取 Dataframe
ddf.compute()
id owner pet_id
0 1 "Charlie" "pet_1"
1 2 "Charlie" "pet_2"
3 4 "Buddy" "pet_3"
但我收到以下错误
_meta = pd.DataFrame(
columns=list(["id", "owner", "pet_id"]])
).astype({
"id":int,
"owner":"object",
"pet_id": "object"
})
ddf = dd.read_json(f"mypets/*.json", meta=_meta)
ddf.compute()
*** ValueError: Metadata mismatch found in `from_delayed`.
我的 JSON 文件看起来像
[
{
"id": 1,
"owner": "Charlie",
"pet_id": "pet_1"
},
{
"id": 2,
"owner": "Charlie",
"pet_id": "pet_2"
}
]
据我了解,问题是我正在传递一个字典列表,所以我正在寻找正确的方法来指定它的meta=
参数
PD:
我也尝试过以下方式
{
"id": [1, 2],
"owner": ["Charlie", "Charlie"],
"pet_id": ["pet_1", "pet_2"]
}
但是 Dask 错误地解释了数据
ddf.compute()
id owner pet_id
0 [1, 2] ["Charlie", "Charlie"] ["pet_1", "pet_2"]
1 [4] ["Buddy"] ["pet_3"]
解决方案
您想要的调用如下:
dd.read_json("data.json", meta=meta,
blocksize=None, orient="records",
lines=False)
这可以在很大程度上从文档字符串中收集到。
- 从您的代码来看,meta 看起来不错
- blocksize 必须为 None,因为每个文件都有一个完整的 JSON 对象并且不能拆分文件
- orient "records" 表示对象列表
- lines=False 表示这不是行分隔的 JSON 文件,这是 Dask 更常见的情况(您不假设换行符意味着新记录)
那么为什么会出错呢?可能 Dask 在某个换行符上拆分了您的文件,因此解析了部分记录,因此与您给定的元数据不匹配。
推荐阅读
- javascript - How to cast a plain object as a instance of another type in JavaScript
- c++ - 无法在模板化 using 语句中为方法函数指定模板参数
- python - 调整大小和重塑形状有什么区别?
- python-3.x - 我收到错误消息“条件需要布尔数组,而不是 int64”。有人可以帮我解决这个问题吗?
- ios - 安装 pod 'CLTypingLabel' 时出错。我不知道如何解决它。我已经尝试了很多次。请有人帮助我
- excel - 将 Excel 值合并到新内容中
- c++ - 三角矩阵对象
- ubuntu - 如何在 Ubuntu 20.04.1 LTS 上激活 SELinux
- tooltip - amCharts 中的 tooltipText 适配器
- c# - Visual Studio Code 未显示建议