【问题标题】:Iterating Dask Dataframe迭代 Dask 数据框
【发布时间】:2021-02-12 12:37:30
【问题描述】:

我正在尝试从数百个大型 CSV 文件的单个列中创建 Keras Tokenizer。 Dask 似乎是一个很好的工具。我目前的方法最终会导致内存问题:

df = dd.read_csv('data/*.csv', usecol=['MyCol'])

# Process column and get underlying Numpy array.
# This greatly reduces memory consumption, but eventually materializes
# the entire dataset into memory
my_ids = df.MyCol.apply(process_my_col).compute().values

tokenizer = Tokenizer()
tokenizer.fit_on_texts(my_ids)

我怎样才能做到这一点?大致如下:

df = pd.read_csv('a-single-file.csv', chunksize=1000)
for chunk in df:
    # Process a chunk at a time

【问题讨论】:

    标签: python pandas keras dask dask-dataframe


    【解决方案1】:

    Dask DataFrame 在技术上是一组 pandas 数据帧,称为分区。当你得到底层的 numpy 数组时,你正在破坏分区结构,它将是一个大数组。我建议使用 Dask DataFrames 的 map_partition 函数在每个分区上分别应用常规 pandas 函数。

    【讨论】:

    【解决方案2】:

    如果适合您的问题,我也会推荐map_partition。但是,如果您真的只想要顺序访问,以及类似于 read_csv(chunksize=...) 的 API,那么您可能正在寻找 partitions 属性

    for part in df.partitions:
        process(model, part.compute())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-05-17
      • 2015-12-09
      • 2017-02-05
      • 1970-01-01
      • 2023-01-04
      • 2017-11-10
      相关资源
      最近更新 更多