【问题标题】:How do I count based on different rows conditions in PySpark?如何根据 PySpark 中的不同行条件进行计数?
【发布时间】:2021-10-28 01:25:00
【问题描述】:
我有以下数据框:
| ID |
Payment |
Value |
Date |
| 1 |
Cash |
200 |
2020-01-01 |
| 1 |
Credit Card |
500 |
2020-01-06 |
| 2 |
Cash |
300 |
2020-02-01 |
| 3 |
Credit Card |
400 |
2020-02-02 |
| 3 |
Credit Card |
500 |
2020-01-03 |
| 3 |
Cash |
200 |
2020-01-04 |
我想做的是统计有多少人同时使用了现金和信用卡。
例如,在这种情况下,会有 2 个 ID 同时使用现金和信用卡。
我将如何在 PySpark 上做到这一点?
【问题讨论】:
标签:
python
apache-spark
pyspark
【解决方案1】:
您可以使用collect_set 计算每个用户有多少种付款方式。
from pyspark.sql import functions as F
(df
.groupBy('ID')
.agg(F.collect_set('Payment').alias('methods'))
.withColumn('methods_size', F.size('methods'))
.show()
)
# +---+-------------------+------------+
# | ID| methods|methods_size|
# +---+-------------------+------------+
# | 1|[Credit Card, Cash]| 2|
# | 3|[Credit Card, Cash]| 2|
# | 2| [Cash]| 1|
# +---+-------------------+------------+