熊猫平行适用于考拉(pyspark)
Posted
技术标签:
【中文标题】熊猫平行适用于考拉(pyspark)【英文标题】:Pandas parallel apply with koalas (pyspark) 【发布时间】:2020-02-11 16:00:46 【问题描述】:我是 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
【问题讨论】:
它不并行化工作听起来很奇怪。查看official API page 并尝试手动设置spark.executor.cores
与您想要的核心数。
@ggeop 我正在使用默认设置运行 Koalas,但您是说需要更改 spark.executor.cores
以使其并行化吗?
【参考方案1】:
我找到了一个讨论这个问题的链接。 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)
【讨论】:
以上是关于熊猫平行适用于考拉(pyspark)的主要内容,如果未能解决你的问题,请参考以下文章