熊猫平行适用于考拉(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)的主要内容,如果未能解决你的问题,请参考以下文章

pyspark:删除所有行中具有相同值的列

熊猫数据帧的 PySpark rdd

为啥要在 PySpark 中导入熊猫?

熊猫 groupby.apply 到 pyspark

为啥在 pyspark 中加入两个临时视图后删除列不起作用,但它适用于数据框连接?

pyspark使用熊猫读取csv,如何保留标题