apache-spark - PATINDEX in spark sql
问题描述
I have this statement in sql
Case WHEN AAAA is not null then AAAA
Else RTRIM(LEFT(BBBB, PATINDEX('%[0-9]%', BBBB) - 1))
END as NAME.
I need to convert this to spark sql. I tried using indexOf, but it doesn't take the string '%[0-9]%. How do i convert the above statement to spark SQL. please help
Thanks !
解决方案
我在 scala spark 中执行此操作的代码。我用 udf 来做到这一点。编辑:假设字符串需要从第一次出现的数字中删除。
import spark.implicits._
val df = Seq(("SOUTH TEXAS SYNDICATE 454C"),
("SANDERS 34-27 #3TF"),
("K. R. BRACKEN B 3H"))
.toDF("name")
df.createOrReplaceTempView("temp")
val getIndexOfFirstNumber = (s: String) => {
val str = s.split("\\D+").filter(_.nonEmpty).toList
s.indexOf(str(0))
}
spark.udf.register("getIndexOfFirstNumber", getIndexOfFirstNumber)
spark.sql("""
select name,substr(name, 0, getIndexOfFirstNumber(name) -1) as final_name
from temp
""").show(20,false)
结果 ::
+------------------------------------+----------------------+
|name |final_name |
+------------------------------------+----------------------+
|SOUTH TEXAS SYNDICATE 454C |SOUTH TEXAS SYNDICATE |
|SANDERS 34-27 #3TF |SANDERS |
|K. R. BRACKEN B 3H |K. R. BRACKEN B |
|ALEXANDER-WESSENDORFF 1 (SA) A5 A 5H|ALEXANDER-WESSENDORFF |
|USZYNSKI-FURLOW (SA) B 3H |USZYNSKI-FURLOW (SA) B|
+------------------------------------+----------------------+
推荐阅读
- laravel-livewire - Laravel Livewire 搜索按钮而不是实时搜索
- php - 将 Ajax 结果传递到表 Codeigniter 的问题
- vuetify.js - 通过代码关闭 Vuetify v-data-table 中的展开行
- reactjs - findDOMNode 在 StrictMode 中已弃用
- firebase - 我可以为任何人应用写入规则来更新存储在 firebase rt 数据库中的对象中的特定项目吗?
- javascript - .after 不要读取 var 值
- php - 挣扎于 PHP 策略模式和接口继承
- ruby-on-rails - form_with 使用嵌套部分将表单内容呈现在元素表格,将内容渲染到表格行中
- shell - “Shell 命令语言”文档 - “令牌识别”部分中的反直觉句子
- javascript - Google 表格:使用脚本自动更新 - 不起作用