【发布时间】:2018-06-03 19:17:45
【问题描述】:
我有一个 17 GB 的大 JSON 文件放在 hdfs 中。我需要读取该文件并将其转换为数字数组,然后将其传递给 K-Means 聚类算法。我尝试了很多方法,但系统速度变慢并出现内存错误或内核死机。
我试过的代码是
from hdfs3 import HDFileSystem
import pandas as pd
import numpy as nm
import json
hdfs = HDFileSystem(host='hostname', port=8020)
with hdfs.open('/user/iot_all_valid.json/') as f:
for line in f:
data = json.loads(line)
df = pd.DataFrame(data)
dataset= nm.array(df)
我尝试使用 ijson,但仍然不确定哪种方法可以更快地完成此操作。
【问题讨论】:
-
我的意思是。如何。如何。人们如何获得 17GB 的 JSON 文件?当人们停下来并说“嘿,这是表格数据,有几百万行,我想知道表格数据格式是否会比这种一般的无结构 JSON 混乱更好”时,难道没有什么意义吗?
-
:(数据来自IOT传感器,存储在Hadoop中。
-
是的,但没有任何物联网传感器会单独向您发送 17GB JSON 文件。您在某处聚合了该数据并决定将其转储到单个 JSON 文件中。这是一个错误。如果是在 Hadoop 中,我敢肯定有比 JSON 更好的导出格式。
-
其实Hadoop是一个数据存储和分析框架。您可能应该直接使用您的 hadoop 实例来获取您想要的数据,而不是使用数据库的转储。 (这感觉很明显,但我认为它可能仍然值得为未来的读者写)。
标签: python json pandas numpy hadoop