[英]PySpark: Fastest way of counting values in multiple columns
我需要在几列中计算一个值,并且我希望列表中每一列的所有这些单独计数。
有没有更快/更好的方法来做到这一点? 因为我的解决方案需要相当长的时间。
dataframe.cache()
list = [dataframe.filter(col(str(i)) == "value").count() for i in range(150)]
您可以进行条件计数聚合:
import pyspark.sql.functions as F
df2 = df.agg(*[
F.count(F.when(F.col(str(i)) == "value", 1)).alias(i)
for i in range(150)
])
result = df2.toPandas().transpose()[0].tolist()
您可以尝试以下方法/设计
VALUE = 'value'
def row_mapper(df_row):
return [each == VALUE for each in df_row]
def reduce_rows(df_row1, df_row2):
return [x + y for x, y in zip(df_row1, df_row2)]
注意:这些是简单的 python function 来帮助您了解一些您可以直接应用于 PySpark 的 udf 函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.