我正在尝试创建一个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")))
如果您有许多排列和/或希望动态配置,则可以使用第二种方法。