Так как количество оценок может отличаться для каждого фильма, вы должны читать ваши данные как текстовый файл, а не как CSV. Предполагая, что вы получите DataFrame, содержащий каждую строку файла
val df = Seq(
"Titanic,9,10,8,6,9",
"Frozen,8,8,8",
"Cars,6,7,8,5"
).toDF("line")
Используя простой UDF, разделите каждую строку на две части: фильм и рейтинги. Установив для параметра limit значение 2
, мы обеспечиваем разделение только по первому разделителю ,
val splitLine = udf { s : String => s.split(",", 2) }
А затем разделить и взорвать рейтинги
df.withColumn("mr", splitLine($"line"))
.select(
$"mr"(0).as("movie"),
explode(split($"mr"(1), ",")).as("rating")
)
Что дает ожидаемый результат
+-------+------+
| movie|rating|
+-------+------+
|Titanic| 9|
|Titanic| 10|
|Titanic| 8|
|Titanic| 6|
|Titanic| 9|
| Frozen| 8|
| Frozen| 8|
| Frozen| 8|
| Cars| 6|
| Cars| 7|
| Cars| 8|
| Cars| 5|
+-------+------+