我有一个如下字符串
val x = "0=0.5,1=0.3,2=0.2"
我要在最终输出中使用0=0.5
。逻辑如下-
0,1,2
是标签,0.5,0.3,0.2
是各自的概率。我想要标签以及具有最高概率的标签的相应概率。
例如,0.5
在0.5,0.3 and 0.2
中是最高的,因此我需要在输出中输入0=0.5
。
一旦开发了此功能,我便希望使用它的UDF,以便可以在下游流程中使用它
答案 0 :(得分:1)
您可以使用Try
尝试将概率字符串值转换为Double并应用maxBy
以获得具有最高概率值的第一个子字符串:
import scala.util.Try
val x = "0=0.5,1=0.3,2=0.2,3=0.5,4=abc"
x.split(",").maxBy( s =>
Try(s.split("=")(1).toDouble).getOrElse(Double.MinValue)
)
// res1: String = 0=0.5
请注意,任何非数字概率值都将转换为Double.MinValue
。
答案 1 :(得分:0)
我想这就是您想要的。
x.split(",").maxBy(_.dropWhile(_ != '=')) //res0: String = 0=0.5
请注意,这些是String
的比较,因此"2"
大于"12"
,但这没关系,因为您感兴趣的是小数点后。