Dask的性能和数据处理

时间:2018-12-12 22:38:12

标签: dask

我已经导入了大约一个实木复合地板文件。 800MB,约5000万行数据转换为dask数据帧。 一共有5列:DATE, TICKER, COUNTRY, RETURN, GICS

问题:

  1. 如何在read_parquet中指定数据类型,或者必须使用astype?
  2. 我可以在read_parquet中解析日期吗?
  3. 我只是尝试执行以下操作:

    import dask.dataframe as dd
    dd.read_parquet('.\abc.gzip')
    df['INDUSTRY'] = df.GICS.str[0:4]
    n = df.INDUSTRY.unique().compute()
    

    ,并且永远需要返回。我在这里做错什么吗?分区会自动设置为1。

我正在尝试做df[df.INDUSTRY == '4010'].compute()之类的事情,它还需要永远返回或崩溃。

1 个答案:

答案 0 :(得分:1)

要回答您的问题:

  1. 镶木地板文件具有存储的类型,如Apache文档here中所述,因此读入文件时将无法更改数据类型,这意味着您必须使用{{ 1}}。
  2. 您不能在读取中将字符串转换为日期,但是,如果使用here文档中的astype函数,则可以将列转换为日期,如本例所示:

    map_partitions

    import dask.dataframe as dd df = dd.read_parquet(your_file) meta = ('date', 'datetime64[ns]') # you can add your own date format, or just let pandas guess to_date_time = lambda x: pd.to_datetime(x, format='%Y-%m-%d') df['date_clean'] = df.date.map_partitions(to_date_time, meta=meta) 函数将在计算文件时转换镶木地板每个块上的日期,使其功能与读取文件时转换日期相同。

  3. 在这里,我想再次使用map_partitions函数将使您受益,因此您可以尝试使用类似的方法

    map_partitions

    请注意,如果您运行import dask.dataframe as dd df = dd.read_parquet('.\abc.gzip') df['INDUSTRY']df.GICS.map_partitions(lambda x: x.str[0:4], meta=('INDUSTRY', 'str')) df[df.INDUSTRY == '4010'] ,该对象将转换为熊猫。如果文件太大,无法计算,则不会返回任何内容。没有看到数据,很难说更多,但是请结帐these tools来分析您的计算以查看您是否在利用所有CPU。