Я использую Spark 2.4, и у меня есть искровой фрейм данных, который имеет 2 столбца - id
и product_list
. Данные состоят из списка продуктов, с которыми взаимодействовал каждый id
.
вот пример кода -
scala> spark.version
res3: String = 2.4.3
val df = Seq(
("1", "p1,p1,p1,p1,p1,p3,p3,p2,p2,p2,p2"),
("2", "p2,p2,p2,p2,p2,p4,p4,p4,p1,p3")
).toDF("id", "product_list")
df.createOrReplaceTempView("df")
+---+--------------------------------+
|id |product_list |
+---+--------------------------------+
|1 |p1,p1,p1,p1,p1,p3,p3,p2,p2,p2,p2|
|2 |p2,p2,p2,p2,p2,p4,p4,p4,p1,p3 |
+---+--------------------------------+
Я хотел бы вернуть те top 2
продукты, которые каждый id
взаимодействовал с. Например, id = 1
просмотрел продукты p1 - 5 times
и p2 - 4 times
, поэтому я хотел бы вернуть p1,p2
для id = 1
. Точно так же, p2,p4
для id = 2
.
Мой окончательный вывод должен выглядеть следующим образом:
id, most_seen_products
1, p1,p2
2, p2,p4
Поскольку я использую Spark 2.4, мне было интересно, есть ли функция более высокого порядка, которая сначала преобразовывает этот список в массив, а затем возвращает верхнюю2 просмотренных товаров. В целом код должен обрабатывать top N
продуктов.