以下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
的列,其类型为text。该值可以是"true"
或"false"
。
结果是,我想有一个名为NumOfSuccess
的附加列,该列对每个类别"true"
的原始列success
中具有条目URL_short
的元素进行计数。
如何修改
df = dataFrame.groupBy("URL_short").count().select("URL_short", col("count").alias("NumOfReqs"))
还要输出满足条件success
==“ true per
URL_short`类别的列吗?
答案 0 :(得分:1)
一种方法是添加另一个聚合表达式(还将count
转换为agg表达式):
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
列为布尔型,如果为字符串,则将表达式更改为f.sum(f.when(f.col('success') == 'true', 1).otherwise(0)).alias('CountOfSuccess')