python - 在pyspark中进行分组时,对另一列上满足额外条件的元素进行计数

标签 python python-3.x pyspark

以下 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==“trueperURL_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/

相关文章:

Python 子图放置

python-3.x - 如何实现自定义 Pyspark 爆炸(用于结构数组),4 列合 1 爆炸?

python - 如何在 python 中应用 2d 和 3d 过滤器

python - pandas DataFrame.replace 函数因日期时间而损坏

python - 如何重新格式化数据框,抑制指数

python - 在 Python 中下载带有 "urllib.request.urlretrieve"的图像失败

java - PySpark 是否调用 java api,然后 java api 调用 Apache Spark 中的 scala api?

pyspark - 在 Spark 中使用逻辑回归计算估计值、Wald-Chi 平方统计量、p 值的标准误差

python - 如何从本地计算机或网络资源将图像或图片嵌入到 jupyter notebook 中?

python - 如何将参数作为元组传递给 odeint?