【问题标题】:PySpark Applying Function to Unique Elements of a RowPySpark 将函数应用于行的唯一元素
【发布时间】:2020-10-02 18:52:08
【问题描述】:

我在 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 中很难。

【问题讨论】:

  • 您期望的表格或数据框是什么?我无法想象。

标签: python pyspark


【解决方案1】:

创建一个pivot table,其中包含产品 1 和产品 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 列的更通用方法(特别是如果有两个以上不同的产品),请查看this answer

【讨论】:

    猜你喜欢
    • 2017-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多