Read_json()dask是并行的吗?

时间:2019-04-15 19:09:42

标签: python bigdata dask

我有以下代码。它使用分布式的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错误。

我应该手动读取每个文件并合并它们吗?还是应该在后台进行?

1 个答案:

答案 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技巧仍然有效,但是您可能需要在单独的行上进行操作。