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|
+----+----+
我的数据框包含一些字符串值的列。
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|
+----+----+