我有以下数据集,并使用PySpark
df = sparkSession.createDataFrame([(5, 'Samsung', '2018-02-23'),
(8, 'Apple', '2018-02-22'),
(5, 'Sony', '2018-02-21'),
(5, 'Samsung', '2018-02-20'),
(8, 'LG', '2018-02-20')],
['ID', 'Product', 'Date']
)
+---+-------+----------+
| ID|Product| Date|
+---+-------+----------+
| 5|Samsung|2018-02-23|
| 8| Apple|2018-02-22|
| 5| Sony|2018-02-21|
| 5|Samsung|2018-02-20|
| 8| LG|2018-02-20|
+---+-------+----------+
# Each ID will appear ALWAYS at least 2 times (do not consider the case of unique IDs in this df)
每个ID只应在表示较高频率时递增产品计数器。 在相同频率的情况下,最近的日期应决定哪个产品收到+1。在
从上面的示例中,所需的输出将是:
PySpark实现这个结果的最有效方法是什么?在
IIUC,您需要为每个
ID
选择最常用的产品,使用 最近的Date
因此,首先,我们可以使用以下方法获得每个产品/ID对的计数:
现在您可以使用}降序排序。如果
^{pr2}$Window
为每个ID对每个产品进行排序。我们可以使用pyspark.sql.functions.desc()
按count
和{row_number()
等于1,则表示该行是第一行。在最后
groupBy()
生成并为Counter
选择最大值的值:更新
这里有一个简单的方法:
相关问题 更多 >
编程相关推荐