Я предполагаю, что Credit , Savings , Premium
строковые столбцы
import org.apache.spark.sql.functions._ // for `when`
df : DataFrame = .....
df.replace("Credit", ImmutableMap.of("1", "Credit"))
.replace("Savings ", ImmutableMap.of("1", "Savings "))
.replace("Premium", ImmutableMap.of("1", "Premium"));
другие мудры вы также можете сделать, как это ...
df.withColumn("Credit", udf1)
.withColumn("Savings ", udf2)
.withColumn("Premium", udf3)
где udf1, 2, 3 являются искровые UDFs для преобразования " 1 "к соответствующим названиям колонок ...
вместо udf. вы также можете использовать синтаксис when(cond, val).otherwise(val)
.
df.withColumn("Credit", when (df("Credit") === "1", lit("Credit")).otherwise(0)
.withColumn("Savings", when (df("Savings") === "1", lit("Savings ")).otherwise(0)
.withColumn("Premium", when (df("Premium") === "1", "Premium").otherwise(0)
Это все .. Удачи :-)
Как отметил @RamPrasad Пробовал этот 'вал udf1 = UDF {(наличие: String) => если (наличие == "1") «Кредит» еще «0» } '. Это сработало! Теперь я пытаюсь создать единую udf для всех столбцов, передав дополнительный параметр функции udf, такой как этот «val udf1 = udf {(presence: String, product: String) => if (presence ==" 1 ") product else «0» } df.withColumn («Кредит», udf1 (sanderProdSmall («Кредит»), «Кредит»)) 'Обнаружена ошибка: String (" ind_cco_fin_ult2 ") требуется: org.apache.spark. sql.Column –