我有以下代码。它使用分布式的dask来读取100个json文件:(工作人员:5 核心数:5 内存:50.00 GB)
from dask.distributed import Client
import dask.dataframe as dd
client = Client('xxxxxxxx:8786')
df = dd.read_json('gs://xxxxxx/2018-04-18/data-*.json')
df = client.persist(df)
运行代码时,我仅看到一名工作人员执行read_json()任务,然后出现内存错误并出现WorkerKilled错误。
我应该手动读取每个文件并合并它们吗?还是应该在后台进行?
答案 0 :(得分:0)
您可能要使用dask.bag而不是dask.dataframe
import json
import dask.bag as db
mybag = db.read_text('gs://xxxxxx/2018-04-18/data-*.json').map(json.loads)
之后,您可以使用以下方法将包转换为dask数据框:
mybag.to_dataframe()
这可能需要dask.map的一些其他用法才能使结构正确。
如果您的数据是hadoop样式的json(每行又名一个对象),那么bag技巧仍然有效,但是您可能需要在单独的行上进行操作。