如果列值是某个字符串Spark Scala,请更改该列值



我正在尝试创建一个UDF函数来替换DF中的一些值。我有以下DF:

df1
+-------------+
| Periodicity |
+-------------+
|  Monthly    |
|  Daily      |
|  Annual     |
+-------------+

因此,如果我在这个DF中发现";年度";,我想把它改成";每年;如果我发现";每日";至";EveryDay";。这就是我正在尝试的:

val modifyColumn = () => if (df1.col("Periodicity").equals("Annual")) "EveryYear"
val modifyColumnUDF = udf(modifyColumn)
val result = df1.withColumn("Periodicity", modifyColumnUDF(df1.col("Periodicity")))

但是给了我一个EvaluateException。我做错了什么?

您可以使用以下方法之一:

// First approach 
dataFrame
.withColumn("Periodicity",
when(col("Periodicity") === "Annual", "EveryYear").otherwise(
when(col("Periodicity") === "Monthly", "EveryMonth").otherwise(
when(col("Periodicity") === "Daily", "EveryDay"))))

// Second approach 
val permutations = Map("Annual" -> "EveryYear", "Monthly" -> "EveryMonth", "Daily" -> "EveryDay")
val medianUDF = udf[String, String]((origValue: String) => permutations(origValue))
dataFrame.withColumn("Periodicity", medianUDF(col("Periodicity")))

如果您有许多排列和/或希望动态配置,则可以使用第二种方法。

最新更新