count - pyspark 根据条件计算行数

标签 count pyspark

我有一个数据框

test = spark.createDataFrame([('bn', 12452, 221), ('mb', 14521, 330),('bn',2,220),('mb',14520,331)],['x','y','z'])
test.show()

我需要根据条件计算行数:

test.groupBy("x").agg(count(col("y")>12453),count(col("z")>230)).show()

这给出了

 +---+------------------+----------------+
 |  x|count((y > 12453))|count((z > 230))|
 +---+------------------+----------------+
 | bn|                 2|               2|
 | mb|                 2|               2|
 +---+------------------+----------------+

这只是行数,而不是某些条件下的行数。

最佳答案

count 不会对 True 求和,它只计算非空值的数量。要计算 True 值,您需要将条件转换为 1/0,然后求和:

import pyspark.sql.functions as F

cnt_cond = lambda cond: F.sum(F.when(cond, 1).otherwise(0))
test.groupBy('x').agg(
    cnt_cond(F.col('y') > 12453).alias('y_cnt'), 
    cnt_cond(F.col('z') > 230).alias('z_cnt')
).show()
+---+-----+-----+
|  x|y_cnt|z_cnt|
+---+-----+-----+
| bn|    0|    0|
| mb|    2|    2|
+---+-----+-----+

关于count - pyspark 根据条件计算行数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49021972/

相关文章:

apache-spark - 内存不足错误: Java heap space in Spark

apache-spark - 交换 pyspark 中的列值

mysql - 如何将mysql数据从hdfs加载到pyspark中

syntax - 如何使用 SPSS 语法来统计变量组合的实例?

php/mysql posting COUNT(*) FROM 投票总数是/否

php - MySQL:计算子级并获取父级行

sql - 如何在 SQL 查询中使用 COUNT 和 SELECT 显示 0 值

mysql - 计算相似记录的数量、平均计数和特定计数的数量

pandas - 引导后,AWS EMR pandas 与 pyspark 中的 numpy 发生冲突

apache-spark - 计算 spark Dataframe 中的新列,使用 pyspark 将 df1 中的标记列表列与 df2 中的文本列交叉