我在hdfs中放置了一个大的17gbjson文件。我需要读取该文件并将其转换为nummy数组,然后将其传递给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,但仍然不确定哪种方法是正确的,以更快的方式做到这一点。
3条答案
按热度按时间x9ybnkn61#
为了处理可能比可用ram大的numpy数组,我将使用内存Map的numpy数组。在我的机器上,ujson比内置json快3.8倍。假设rows是json的行数:
n3ipq98p2#
我会远离numpy和Pandas,因为这两种情况下你都会有记忆问题。我宁愿坚持使用sframe或blaze生态系统,它们是专门为处理这种“大数据”案例而设计的。神奇的工具!
lp0sw83n3#
因为每列的数据类型都是不同的,所以dataframe是一个更合适的数据结构来保存它。您仍然可以使用numpy函数操作数据。
为了避免崩溃问题,请尝试在数据集中的一个小样本上运行k-means。确保工作正常。然后可以增加数据大小,直到您对整个数据集感到满意为止。