繁体   English   中英

PySpark:在多列中计数值的最快方法

[英]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()

您可以尝试以下方法/设计

  1. 为数据帧的每一行写一个 map function,如下所示:
VALUE = 'value'

def row_mapper(df_row):
    return [each == VALUE for each in df_row]
  1. 为数据帧编写一个减少 function ,将 2 个两行作为输入:
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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM