我需要使用火花更正一些拼寫。 不幸的是像通過udf火花拼寫校正
val misspellings3 = misspellings1
.withColumn("A", when('A === "error1", "replacement1").otherwise('A))
.withColumn("A", when('A === "error1", "replacement1").otherwise('A))
.withColumn("B", when(('B === "conditionC") and ('D === condition3), "replacementC").otherwise('B))
一個天真的做法不符合火花工作How to add new columns based on conditions (without facing JaninoRuntimeException or OutOfMemoryError)?
簡單的案件(第2例),可以很好地通過
val spellingMistakes = Map(
"error1" -> "fix1"
)
val spellingNameCorrection: (String => String) = (t: String) => {
titles.get(t) match {
case Some(tt) => tt // correct spelling
case None => t // keep original
}
}
val spellingUDF = udf(spellingNameCorrection)
val misspellings1 = hiddenSeasonalities
.withColumn("A", spellingUDF('A))
處理,但我不確定如何在一個好的&一般化的方式中處理UDF中更復雜/鏈接的條件替換。 如果它只是一個相當小的拼寫列表< 50你會建議在UDF中硬編碼嗎?
的確,但你的功能基本上已經在我的問題如上圖所示。現在,我將使用鏈接解決方案,因爲https://issues.apache.org/jira/browse/SPARK-18532 –