![](/img/trans.png)
[英]Scala Spark udf java.lang.UnsupportedOperationException
[英]Scala enum - Java.lang.UnsupportedOperationException
我正進入(狀態
java.lang.UnsupportedOperationException:不支持 Range.Value 類型的架構。
感謝對此的任何指示
object Range extends Enumeration {
type Range = Value
val RangeMedium = Value("Range Medium")
val RangeHigh = Value("Range Higher")
val RangeNotEnough = Value("Range Not enough")
val NotApplicable = Value("Not Applicable")
}
val getRange = udf((p1: Double, p2: Double) => {
if (p1 >= 5 && p1 < 10 && p2 >= 1) {
Some(Range.RangeMedium)
}
else if (p1 >= 10 && p2 >= 1) {
Some(Range.RangeHigh)
}
else {
Some(Range.NotApplicable)
}
})
ds = Seq(9,10).toDF("p1","p2")
ds.withColumn("level",getRange($"p1",$"p2")).show()
如果要從 UDF 返回字符串,可以嘗試使用.toString
將枚舉值轉換為字符串:
object Range extends Enumeration {
type Range = Value
val RangeMedium = Value("Range Medium")
val RangeHigh = Value("Range Higher")
val RangeNotEnough = Value("Range Not enough")
val NotApplicable = Value("Not Applicable")
}
val getRange = udf((p1: Double, p2: Double) => {
if (p1 >= 5 && p1 < 10 && p2 >= 1) {
Range.RangeMedium.toString
}
else if (p1 >= 10 && p2 >= 1) {
Range.RangeHigh.toString
}
else {
Range.NotApplicable.toString
}
})
val ds = Seq((9,10)).toDF("p1","p2")
ds.withColumn("level",getRange($"p1",$"p2")).show()
+---+---+------------+
| p1| p2| level|
+---+---+------------+
| 9| 10|Range Medium|
+---+---+------------+
話雖如此,這種操作也可以使用when
語句而不是 UDF,它應該更高效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.