python - PySpark 将函数应用于行的唯一元素
问题描述
我在 PySpark 中工作,并有一个作为 Spark DataFrame 导入的事务表,如下所示:
User_ID Date Product_Name
-------- ------ -------------
A 2019-11-30. Product 1
B 2019-10-20 Product 2
C 2019-10-01 Product 1
A 2019-12-01 Product 1
我要做的是为每个唯一的 User_ID 创建一个结果表,计算该用户购买的产品 1 是否多于产品 2,然后返回字符串“产品 1”或“产品 2”另一种情况是在这个新表的第二列中。
我发现在 PySpark 中很难。
解决方案
创建一个包含 Product 1 和 Product 2 计数列的数据透视表。然后可以比较这两列。
df.groupBy("User_ID").pivot("Product_Name").agg(F.count("Product_Name")) \
.fillna(0) \
.withColumn("result", F.when(F.col("Product 1") > F.col("Product 2"), "Product 1").otherwise("Product 2")) \
.show()
输出:
+-------+---------+---------+---------+
|User_ID|Product 1|Product 2| result|
+-------+---------+---------+---------+
| B| 0| 1|Product 2|
| C| 1| 0|Product 1|
| A| 2| 0|Product 1|
+-------+---------+---------+---------+
有关如何计算result
列的更通用方法(特别是如果有两个以上不同的产品),请查看此答案。
推荐阅读
- c# - 从 Visual Studio 2017 使用 OData 服务
- agile - 如何在 Tuleap 中恢复看板仪表板?
- python - 贝塞尔曲线曲面
- sql - 如何从批处理文件执行 Sql 查询
- odoo - odoo - 解释 @api.multi - 记录集
- javascript - 括号中的构造函数调用时未定义Javascript原型函数
- wordpress - WordPress中的文件路径不是默认值
- c# - 如何在 WPF 中激活 UserControl 的所有父级(即一个选项卡)
- sql - 使用 sql 查询从数据库中计算百分比(SQL Management Studio 2012)?
- ruby-on-rails - 使用 Turbolinks 5 和 Rails 5 在页面之间重新加载资产