0

我正在尝试将 1000 亿个多维时间序列数据点从具有以下格式的 CSV 文件加载到 Graphite 中:

时间戳 value_1 value_2 .... value_n

我试图在官方文档中找到一种快速加载方法,这就是我目前进行插入的方式(我的代码库在 Python 中):

f = open(args.file, "r")
bucket_size = int(5000 / columns)
total_time = 0.0
insert_value = ""
for i in tqdm(range(rows)):
    value = f.readline()[:-1].split(" ")
    currentTime, args.format = get_datetime(value[0])
    currentTime = (currentTime - datetime(1970, 1, 1)).total_seconds()
    currentTime = int(currentTime)
    
    for j in (range(columns)):
        insert_value += "master." + args.format + ".dim" + str(j) + " " + value[j + 1] + " " + str(currentTime) + "\n"
    if (i + 1) % bucket_size == 0 or i == rows - 1:
        sock.sendall( bytes(insert_value, "UTF-8"))
        insert_value = ""
sock.close()
f.close()

如上面的代码所示,我的代码正在读取数据集 CSV 文件并准备 5000 个数据点的批次,然后使用sock.sendall.

但是,这种方法效率不高。事实上,我正在尝试加载 1000 亿个数据点,这比预期的要长,加载只有 500 万行,每行 1500 列已经运行了 40 小时,还有 15 小时才能完成:

在此处输入图像描述

我几乎可以肯定有一种更好的方法可以将数据集加载到 Graphite 中。

4

0 回答 0