scala - 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,以便我可以在下游流程中使用它
解决方案
您可以使用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
.
推荐阅读
- c# - 一个项目中的 ASP.NET MVC 和 Razor Navigation
- python - 如何在水平列表中显示python函数的输出,以便我们可以重用它?
- laravel - phpunit 测试中的 POST、Response 和 assertJson
- c# - 从 PDF 的特定图层获取文本
- python - 使用 pandas 的 Z 分数计算/标准化
- angular - 运行“ts-node:server”时,在角度 ssr 中的 my-date-picker 中获取“SyntaxError: Unexpected token {”
- mysql - MySQL中的“每个派生表都必须有自己的别名”错误?
- google-bigquery - BigQuery 中的比特币:对公共数据的区块链分析错误的遗漏结果
- android - API 28:BroadcastReceiver onReceive 永远不会执行
- python - 如何在不使用 cv2.cvtColor() 的情况下将 3 个通道图像转换为 1 个通道图像?