如何提高从s3解析json的Dask性能

时间:2017-10-11 09:41:44

标签: amazon-s3 dask

我正在比较从s3加载数据并解析json内容的普通脚本。我想Dask在这些任务中会更快。但是我使用的Dask脚本似乎比ruby脚本基准测试慢得多。

这是脚本:

import time
import dask.bag as db
from dask.distributed import Client
import ujson
from s3fs import S3FileSystem

fs = S3FileSystem(anon=False)
client = Client()

target_id=2
target_path = "s3://bucket/log/2014/07/%d/"
target_path_dirs = [fs.ls(target_path % x) for x in range(10,21)]
target_paths = ['s3://'+x+"/*.json" for x in sum(target_path_dirs,[])]

t0 = time.time()
records = db.read_text(target_paths).map(ujson.loads)
filtered_records = records.filter(
       lambda x: x['id'] == target_id)

r_c = filtered_records.compute()
t1 = time.time()
total = t1 - t0
print(total)

ruby​​脚本使用aws s3 cp --recursive下载文件,然后继续解析json文件。它只需要3分钟,最终文件是1.5 Mb。可能是什么问题?

我在一台计算机上运行此脚本,但它有8个内核和32GiB的RAM,所有内核在运行Dask脚本时似乎都在工作。

1 个答案:

答案 0 :(得分:1)

似乎网络似乎是瓶颈。我先下载了数据,然后在8秒内解析,这比解析2分钟的脚本要快。