Pandas параллельно применять с коалами (pyspark) - PullRequest
0 голосов
/ 11 февраля 2020

Я новичок в Koalas (pyspark), и я пытался использовать Koalas для параллельного применения, но казалось, что он использовал одно ядро ​​для всей операции (поправьте меня, если я ошибаюсь) и в итоге используя dask для параллельного применения (используя map_partition), который работал довольно хорошо.

Тем не менее, я хотел бы знать, есть ли способ использовать коалы для параллельного применения.

Я использовал базовые коды c для работы, как показано ниже.

import pandas as pd
import databricks.koalas as ks

my_big_data = ks.read_parquet('my_big_file') # file is single partitioned parquet file

my_big_data['new_column'] = my_big_data['string_column'].apply(my_prep) # my_prep does stirng operations


my_big_data.to_parquet('my_big_file_modified') # for Koalas does lazy evaluation

1 Ответ

0 голосов
/ 20 февраля 2020

Я нашел ссылку, обсуждающую эту проблему. https://github.com/databricks/koalas/issues/1280

Если число строк, применяемых функцией, меньше 1,000 (значение по умолчанию), то для выполнения операции будет вызван pandas dataframe.

Пользовательская функция, указанная выше my_prep, применяется к каждой строке, поэтому использовалось одноядерное pandas.

Чтобы заставить его работать в режиме pyspark (параллельно), Пользователь должен изменить конфигурацию, как показано ниже.

import databricks.koalas as ks
ks.set_option('compute.default_index_type','distributed') # when .head() call is too slow
ks.set_option('compute.shortcut_limit',1) # Koalas will apply pyspark 

Кроме того, явное указание типа (подсказка типа) в пользовательской функции заставит Koalas не использовать go путь быстрого доступа и будет параллельным.

def my_prep(row) -> string:
  return row

kdf['my_column'].apply(my_prep)
...