Spark SQL调用regexp_extract的处理方式

本文介绍了regexp_extract函数的使用,该函数用于从字符串中按照正则表达式规则提取特定分组的内容。通过示例展示了如何从'100-200'和'8d99d8'中提取数字,返回的结果分别是200和99。该函数在数据处理和分析中非常实用。
regexp_extract
函数功能:将字符串按照指定规则拆分为组后,返回指定组的字符串。
命令格式:string regexp_extract(string <source>, string <pattern>[, bigint <groupid>])
    命令说明:将字符串source按照pattern的分组规则进行字符串匹配,返回第groupid个组匹配到的字符串内容
    参数说明:source是待拆分的字符串
             pattern是常量或正则表达式
             groupid是数组里要的下标值
示例:
  SELECT REGEXP_EXTRACT('100-200', '(\\d+)-(\\d+)', 2)
  结果200,注意这里需要使用两个"\"作为转义字符

  SELECT REGEXP_EXTRACT('8d99d8', '8d(\\d+)d8', 1);
  结果99

#!/bin/python3 from pyspark.sql import SparkSession import os spark = SparkSession.builder \ .master("local[*]") \ .appName("app") \ .config('spark.driver.memory', '6g') \ .config('spark.executor.memory', '6g') \ .config('spark.local.dir', '/home/spark-tmp') \ .config('spark.sql.parquet.writeLegacyFormat', 'true') \ .config("hive.metastore.uris", "thrift://zhiyun:9083") \ .enableHiveSupport() \ .getOrCreate() sql = ''' with t as ( select createtime, createuser, groupid, replace(groupname, '用户组', '') as groupname, notes, stamp, -- 最终精准拆分逻辑:覆盖所有区间格式 case when notes like '小于%' then 0 when notes like '大于等于%小于%' then cast(regexp_extract(notes, '大于等于(\\d+)(?:小于|小于于)(\\d+)', 1) as int) when notes like '大于等于%' then cast(regexp_extract(notes, '大于等于(\\d+)', 1) as int) else null end as min_val, case when notes like '小于%' then cast(regexp_extract(notes, '小于(\\d+)', 1) as int) when notes like '大于等于%小于%' then cast(regexp_extract(notes, '大于等于(\\d+)(?:小于|小于于)(\\d+)', 2) as int) when notes like '大于等于%' then '无限大' else null end as max_val from ods_quweidong.erp_c_memcard_class_group_full ) select createtime, createuser, groupid, groupname, min_val, max_val, stamp, notes from t ''' df = spark.sql(sql) df.show() print("创建DWD数据库") os.system(''' hive -e 'create database if not exists dwd_quweidong location "/zhiyun/quweidong/dwd"' ''') os.system("hadoop fs -mkdir -p /zhiyun/quweidong/dwd/erp_c_memcard_class_group_new") df.write.format("hive") \ .mode("overwrite") \ .option("fileFormat","parquet") \ .option("location","/zhiyun/quweidong/dwd/erp_c_memcard_class_group_new") \ .saveAsTable("dwd_quweidong.erp_c_memcard_class_group_new") print("验证数据(ODS/DWD):") spark.sql("select count(1) from ods_quweidong.erp_c_memcard_class_group_full").show() spark.sql("select count(1) from dwd_quweidong.erp_c_memcard_class_group_new").show() print("清洗完成!")
最新发布
11-04
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值