Pandas 与 koalas (pyspark) 并行应用

Pandas parallel apply with koalas (pyspark)

我是 Koalas (pyspark) 的新手,我试图利用 Koalas 进行并行应用,但它似乎在整个操作中使用了一个核心(如果我错了请纠正我)并且最终使用 dask 进行并行应用(使用 map_partition),效果很好。

但是,我想知道是否有办法利用 Koalas 进行并行应用。

我使用基本代码进行如下操作。

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

我找到了一个讨论这个问题的 link。 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 不走捷径而并行。

def my_prep(row) -> string:
  return row

kdf['my_column'].apply(my_prep)