Параметр подсчета искр "упоминания" в строках - PullRequest
0 голосов
/ 05 сентября 2018

Вот пример DF:

Car       Model  Colors
Toyota    RAV4   Red, Black
Toyota    Camry  Red, White   

(в списке может быть любое количество цветов)

Как бы я изменил начальный DF на этот (без дублирование каждой строки и подсчет совпадений в первых 2 столбцах)?

Toyota    Black   1
Toyota    Red     2
Toyota    White   1  

(где цифры означают, сколько моделей! Каждого производителя автомобилей доступны в определенном цвете)

P.S Вот мой взгляд на вопрос:

val folded = rdd
  .groupBy(_.manufacturer)
  .mapValues(_.foldLeft(mutable.HashMap.empty[String, Long])((hm, el) => el.colors.foreach(color => hm(color) = hm(color) + 1)))

, который дает мне счет. Хотя я не уверен, как сгенерировать DF, необходимый из ' сложенный '.

1 Ответ

0 голосов
/ 05 сентября 2018

сначала вам нужно разделить столбец цветов, затем взорвать его, и, наконец, сгруппировать по цвету и машине, попробуйте следующий код;

scala> val initialDf = spark.createDataFrame(List(("Toyota","RAV4","Red,Black"),("Toyota","Camry","Red,White"))).toDF("Car","Model","Colors")

scala> initialDf.select($"Car",explode(split($"Colors",",")).as("Color")).groupBy($"Car",$"Color").agg(count($"Color").as("cnt")).show()

+------+-----+---+
|   Car|Color|cnt|
+------+-----+---+
|Toyota|White|  1|
|Toyota|  Red|  2|
|Toyota|Black|  1|
+------+-----+---+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...