You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala如何从字符串类型的QueryResult结果中提取cbcnt字段值

正则提取cbcnt值的调整方案

原来的正则存在两点不足:一是无法过滤字符串类型值外层的双引号,二是没有截断日期时间字符串的时间部分,因此无法得到预期输出。

最终实现代码

import org.apache.spark.sql.functions.{regexp_extract, coalesce, split}

df.withColumn("CbRes", 
  split(
    coalesce(
      regexp_extract($"Col", """"cbcnt":(?:"([^"]+)"|(\d+))""", 1),
      regexp_extract($"Col", """"cbcnt":(?:"([^"]+)"|(\d+))""", 2)
    ),
    "T"
  )(0)
)

逻辑说明

  • 正则表达式做了分支兼容设计:
    • 匹配带双引号的字符串类型值时,直接捕获引号内的内容到分组1,自动丢弃外层双引号
    • 匹配不带双引号的数字类型值时,捕获数字内容到分组2
  • coalesce函数会自动取两个分组中存在值的结果,同时兼容数字、字符串两种返回类型的cbcnt值
  • 按字符T拆分提取到的日期时间字符串,取第一个元素即可得到yyyy-MM-dd格式的纯日期结果

执行后输出完全符合预期:

col
----
0
2021-07-30

内容的提问来源于stack exchange,提问作者VnS

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 05:15:02