Производительность и манипулирование данными на Dask - PullRequest
0 голосов
/ 13 декабря 2018

Я импортировал паркетный файл ок.800 МБ с ~ 50 миллионами строк в кадре данных.Есть 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 голосов
/ 17 декабря 2018

Чтобы ответить на ваши вопросы:

  1. В файле паркета хранятся типы, как указано в документации Apache здесь , поэтому вы не сможете изменить тип данныхкогда вы читаете файл в, это означает, что вам придется использовать astype.
  2. Вы не можете преобразовать строку в дату в чтении, хотя, если вы используете функцию 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)
    

    Функция map_partitions преобразует даты на каждом фрагменте паркета, когда файлвычисляется, что делает его функциональным так же, как преобразование даты чтения файла.

  3. Здесь я снова думаю, что вам было бы полезно использовать функцию 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']
    

    Обратите внимание, что при запуске compute объект преобразуется в панд.Если файл слишком велик, Dask не сможет его вычислить и, следовательно, ничего не будет возвращено.Не видя данных, сложно сказать больше, но сделайте проверку этих инструментов , чтобы профилировать свои вычисления, чтобы увидеть, используете ли вы все свои процессоры.

...