微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将多个 json 文件转换为单个 dask 数据框并将此数据框保存在数据库中 编辑以获取更多信息

如何解决将多个 json 文件转换为单个 dask 数据框并将此数据框保存在数据库中 编辑以获取更多信息

我在一个文件夹中有大量 json 文件。我想阅读它们并将它们保存在一个数据库中。我曾想过使用熊猫数据帧来执行此操作,但由于文件数量众多,此操作非常慢。有人推荐了dask,它也有dataframes,而且速度似乎非常快,所以我安装了它并做了一些测试。似乎得到了证实。但与 Pandas 不同的是,数据框只包含每个 json 的文本内容。有人可以告诉我如何做到这一点,以便我获得一个数据框,其中包含读取的所有 json 文件以及每个 json 中每个对象的键的列名以及值?

熊猫代码

import pandas as pd


data = []
folder = '20-05-2019'
json_files = get_json_files(folder)
for json_file in json_files:
    df_temp = pd.read_json(json_file,encoding='utf-8')
    data.append(df_temp)

df = pd.concat(data)

df.head(10)

结果

https://i.imgur.com/NMLH5dj.png

dask 数据帧代码

code+result

示例文件夹,每个文件夹中有 7000 个 json 文件(共 3000 个文件夹)

https://i.imgur.com/JxzYO6X.png

示例 json

[
    {
        "sector":"AAA","code":"0009","id":"00000001","fname":"FirstName","lname":"LastName","height":"158","dob":"01/03/2006","din":"19/05/2019 13:23","dout":"19/05/2019 17:46","type":"some text","group":"2","dod":"19/05/2019 13:48","desc":"some text","details":"some text","feval":"Triage 1","localisation":"some place","infop":"not yet implemented","is_in":true,"is_op":false,"list_c":[],"list_e":[],"list_a":[],"list_r":[]
    },{
        "sector":"AAA",]

编辑以获取更多信息

也许我没有很好地解释为什么我先把所有东西都放在一个数据框中。事实上,在每个 json 中都存储了一定数量的关于人的信息,并且这些数据会定期更新。在一天结束时,将在数据库中进行备份操作。因此,在将所有内容保存到数据库中之前,必须先处理文件间的重复数据问题,有时而且经常是这样。

这意味着无法单独处理文件。您必须将它们全部组合在一个数据框中(这是我目前最好的主意)。

解决方法

正如经常发生的那样,答案实际上很简单 - 为此,您不需要 任何 dask 的数据帧 API,您将一一处理您的文件。这不需要任务之间的交互,也不需要输出,因此您只需使用 delayed 函数即可。

from dask import compute,delayed

@dask.delayed
def process(file_name):
    df = pd.read_json(json_file,encoding='utf-8')
    df.to_sql(...)

tasks = [process(fn) for fn in json_files]
dask.compute(*tasks)

这可能会大量使用python解释器,因此您会发现上面的在单个进程中无法使用所有内核。我建议您使用 dask.distributed 创建一个本地集群,该集群的进程数与内核数相同,每个进程一个线程。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?