首页 > 解决方案 > 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 中很难。

标签: pythonpyspark

解决方案


创建一个包含 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列的更通用方法(特别是如果有两个以上不同的产品),请查看此答案


推荐阅读