以下 pyspark 命令
df = dataFrame.groupBy("URL_short").count().select("URL_short", col("count").alias("NumOfReqs"))
创建了以下结果。
|URL_short |NumOfReqs|
+-----------------------------------------------------------------------------------------+---------+
|http1 | 500 |
|http4 | 500 |
|http2 | 500 |
|http3 | 500 |
在原始 DataFrame dataFrame
中,我有一个名为 success
的列,其类型为文本。该值可以是“true”
或“false”
。
在结果中,我希望有一个名为 NumOfSuccess
的附加列,它对原始列 success< 中具有条目
每个类别 "true"
的元素进行计数URL_short
。
如何修改
df = dataFrame.groupBy("URL_short").count().select("URL_short", col("count").alias("NumOfReqs"))
还输出满足条件success
==“trueper
URL_short`类别的列?
最佳答案
一种方法是添加另一个聚合表达式(也将 count
转换为聚合表达式):
import pyspark.sql.functions as f
dataFrame.groupBy("URL_short").agg(
f.count('*').alias('NumOfReqs'),
f.sum(f.when(f.col('success'), 1).otherwise(0)).alias('CountOfSuccess')
).show()
请注意,这假设您的 success
列是 bool 类型,如果是字符串,请将表达式更改为 f.sum(f.when(f.col('success') == ' true', 1).otherwise(0)).alias('CountOfSuccess')
关于python - 在pyspark中进行分组时,对另一列上满足额外条件的元素进行计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53836767/