2

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

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

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

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

4

1 回答 1

3

我找到了一个讨论这个问题的链接。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 

另外,在用户定义的函数中显式指定类型(类型提示)将使考拉不走捷径,并会并行。

def my_prep(row) -> string:
  return row

kdf['my_column'].apply(my_prep)
于 2020-02-20T13:00:50.847 回答