Scala UDF用于数组排序

时间:2018-12-27 18:57:46

标签: scala

我有一个如下字符串

val x = "0=0.5,1=0.3,2=0.2"

我要在最终输出中使用0=0.5。逻辑如下-

0,1,2是标签,0.5,0.3,0.2是各自的概率。我想要标签以及具有最高概率的标签的相应概率。

例如,0.50.5,0.3 and 0.2中是最高的,因此我需要在输出中输入0=0.5

一旦开发了此功能,我便希望使用它的UDF,以便可以在下游流程中使用它

2 个答案:

答案 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",但这没关系,因为您感兴趣的是小数点后。