首页 > 解决方案 > Scala UDF 用于数组排序

问题描述

我有一个字符串如下

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,以便我可以在下游流程中使用它

标签: scala

解决方案


您可以使用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.


推荐阅读