初始的数据metrics为Map[String, Any],经过分析后发现Any里面的数据类型为WrappedArray(map(),map())类型。
我想从以下数据获取出non_unique = 1这样的值,需要如何操作?
数据例子如下:
Map(applicationId -> local-1673262860096,
job_name -> dist_batch,
tmst -> 1673262884352,
measure_name -> duplication_measure,
metrics -> WrappedArray(
Map(metric_name -> total, metric_value -> 50),
Map(metric_name -> duplicate, metric_value -> 1),
Map(metric_name -> unique, metric_value -> 48),
Map(metric_name -> non_unique, metric_value -> 1),
Map(metric_name -> distinct, metric_value -> 49)
),
measure_type -> Duplication,
data_source -> source)
可以使用如下的代码来获取 non_unique=1 的值:
val metrics = data("metrics").asInstanceOf[WrappedArray[Map[String, Any]]]
val nonUniqueValue = metrics.find(_("metric_name") == "non_unique").map(_("metric_value"))
在上面的代码中,我们首先获取了 metrics 字段对应的值,然后将它转换为 WrappedArray[Map[String, Any]] 类型。接着,我们使用 find 方法查找 metric_name 为 "non_unique" 的元素。如果找到,则返回 Some(map),否则返回 None。最后,我们使用 map 方法从 Some(map) 中取出 map,然后返回 metric_value 字段的值。
如果你想要直接获取 non_unique=1 的值,可以使用如下的代码:
val nonUniqueValue = metrics.find(_("metric_name") == "non_unique").flatMap(_.get("metric_value"))
这样,如果找到了 metric_name 为 "non_unique" 的元素,就直接返回 metric_value 字段的值;否则返回 None。