Я хотел бы уменьшить значения определенного столбца в кадре данных на основе предварительно определенных категорий сопоставления с образцом.
Пример:
val df = spark.createDataFrame(Seq(
(1, "apple"),
(2, "banana"),
(3, "avocado"),
(4, "potato"))).toDF("Id", "category")
Id category
1 apple
2 banana
3 avocado
4 potato
Желаемый вывод:
val df_reduced = spark.createDataFrame(Seq(
(1, "fruit"),
(2, "fruit"),
(3, "vegetable"),
(4, "vegetable"))).toDF("Id", "category")
Id category
1 fruit
2 fruit
3 vegetable
4 vegetable
Вот решение, которое я придумал:
df.withColumn("category", when(col("category") === "apple", regexp_replace(col("category"), "apple", "fruit"))
.otherwise(when(col("category") === "banana", regexp_replace(col("category"), "banana", "fruit"))
.otherwise(when(col("category") === "avocado", regexp_replace(col("category"), "avocado", "vegetable"))
.otherwise(when(col("category") === "potato", regexp_replace(col("category"), "potato", "vegetable"))
))))
.show
Мне не очень нравится этот вложенный подход, когда есть необходимость, поэтому я хотел бы знать: есть ли лучшее, более идиоматическое решение дляэто задание?