Вы можете написать простое udf
, которое splits
String
и возвращает самое большее 3 значения из array
как
val origDF = Seq(
("A", "1,6,5,3,7"),
("B", "17,18,78"),
("C", "90"),
("D", "56,57")
).toDF("Col_A", "Col_B")
val valueAsArray = udf((value: String) => {
value.split(",").map(_.trim).take(3)
})
Теперь используйте udf
с withColumn
иexplode
origDF.withColumn("Col_B", explode(valueAsArray($"Col_B"))).show(false)
Вывод:
+-----+-----+
|Col_A|Col_B|
+-----+-----+
|A |1 |
|A |6 |
|A |5 |
|B |17 |
|B |18 |
|B |78 |
|C |90 |
|D |56 |
|D |57 |
+-----+-----+
Надеюсь, это поможет!