sql - pyspark sql 查询 : count distinct values with conditions

标签 sql pyspark

我有一个如下的数据框:

+-----------+------------+-------------+-----------+
| id_doctor | id_patient | consumption | type_drug |
+-----------+------------+-------------+-----------+
| d1        | p1         |        12.0 | bhd       |
| d1        | p2         |        10.0 | lsd       |
| d1        | p1         |         6.0 | bhd       |
| d1        | p1         |        14.0 | carboxyl  |
| d2        | p1         |        12.0 | bhd       |
| d2        | p1         |        13.0 | bhd       |
| d2        | p2         |        12.0 | lsd       |
| d2        | p1         |         6.0 | bhd       |
| d2        | p2         |        12.0 | bhd       |
+-----------+------------+-------------+-----------+

我想计算每位医生服用 bhd 且消费 < 16.0 的不同患者。

我尝试了以下查询,但不起作用:
dataframe.groupBy(col("id_doctor"))
         .agg(
         countDistinct(col("id_patient")).where(col("type_drug") == "bhd" & col("consumption") < 16.0)
         )

有什么帮助吗?

谢谢!

最佳答案

PySpark 中的另一种解决方案,无需添加另一列:

dataframe.groupBy('id_doctor').agg(F.countDistinct(F.when(col("type_drug") == "bhd" & col("consumption") < 16.0, col('id_doctor')).otherwise(None)))

关于sql - pyspark sql 查询 : count distinct values with conditions,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54004970/

相关文章:

python - 如何在 Pyspark 数据框中将 ArrayType 的 2 列连接到 axis = 1 上?

sql - 具有 Union All 的 Nullpointer Exception Hive

sql - 带内部连接的SQLite Where子句

mysql - 使用 MAX() 进行分组仍然选择其他行

java - 如何使用 JDBC 从 ResultSet 中只获取 5 行?

python 2.7 : delete item from list by value

python - 在 PySpark 中应用自定义函数时使用外部模块

php - Laravel 上的 "Action App\Http\Controllers\CommentRepliesController@createReply not defined"错误

python - 在 Spark RDD 和/或 Spark DataFrames 中 reshape /透视数据

hadoop - LeaseExpiredException关于Spark中的动态分区