Spark SQL中是否有等价于Redshift REGEXP_COUNT的函数?
Spark SQL 实现类似 Redshift REGEXP_COUNT 的功能
Spark SQL 没有与 Redshift 的REGEXP_COUNT完全同名的内置函数,但可以通过现有函数组合实现统计子字符串出现次数的需求,以下是两种常用方法:
方法一:使用 split + size
这是最通用的方法,适用于任意正则表达式匹配的子串:
SELECT size(split('1->2->3->456', '->')) - 1 AS regexp_count_result;
执行后返回结果为3,与你需要的效果一致。
原理:split函数会将原字符串按匹配的子串拆分,拆分后的数组长度减去1,就是子串出现的次数。
方法二:使用 regexp_replace + length(适用于固定长度子串)
如果待统计的子串是固定长度的,可以用这种方式:
SELECT length(regexp_replace('1->2->3->456', '[^->]', '')) / 2 AS regexp_count_result;
这里'->'长度为2,所以用处理后的字符串长度除以2得到次数。注意这种方法仅适用于子串长度固定的场景,且需要注意正则表达式的转义问题。
内容的提问来源于stack exchange,提问作者Woody
相关产品推荐
相关产品推荐

