Pyspark 在 python 中并行化列操作

Pyspark parallelize column wise operations in python

我的数据框包含一些字符串值的列。

col1|col2
---------
aaa |bbb
ccc |ddd
aaa |ddd
eee |fff

我必须获取每列中存在的允许值 ({aaa,ddd}) 的数量。

cond = "`col1` = 'aaa' OR `col1` = 'ddd'"
dataframe.where(F.expr(cond)).count()

通过这种方式,我们获得了所需的值。我们遍历所有列并对每一列执行此操作。

当列数增加到 2000 时,此方法需要数小时才能处理。

是否有更好更快的并行处理所有列的方法?

一种替代方法是在 Python 中使用列表理解对数据框的所有列应用相同的条件

import pyspark.sql.functions as F

ok_values = ['aaa', 'ddd']
dataframe = dataframe.select(
  *[F.sum((F.col(c).isin(ok_values)).cast('integer')).alias(c) for c in dataframe.columns]
)

dataframe.show()
+----+----+
|col1|col2|
+----+----+
|   2|   2|
+----+----+