为什么`linedelimiter`不适用于bag.read_text?

时间:2018-03-16 12:27:38

标签: dask

我正在尝试从

创建的文件中加载yaml
entries = bag.from_sequence([{1:2}, {3:4}])
yamls = entries.map(yaml.dump)
yamls.to_textfiles(r'\*.yaml.gz')

yamls = bag.read_test(r'\*.yaml.gz', linedelimiter='\n\n)

但它逐行读取文件。如何从文件中读取yamls?

更新:

  1. 虽然blocksize=None read_text逐行读取文件。
  2. 如果设置了blocksize,则可以读取压缩文件。
  3. 如何克服这个?解压缩文件是唯一的选择吗?

1 个答案:

答案 0 :(得分:0)

事实上,yamls = bag.read_test(r'\*.yaml.gz').map_partitions( lambda x: '\n'.join(x).split(delimiter)) 不是用于你想到的意义,而是用于分隔较大的块。正如您所说,当您使用gzip压缩时,该文件不再是随机可访问的,并且根本无法使用块。

有可能将{{1}}传递给将数据块转换为行的函数(如果您感兴趣的话,可以在{{1}}中)。

目前,解决方法可能如下所示:

{{1}}