PATINDEX в искровой sql - PullRequest
       4

PATINDEX в искровой sql

0 голосов
/ 10 октября 2019

У меня есть это утверждение в sql

Case WHEN AAAA is not null then AAAA
     Else RTRIM(LEFT(BBBB, PATINDEX('%[0-9]%', BBBB) - 1))
     END as NAME. 

Мне нужно преобразовать это в спарк sql. Я пытался использовать indexOf, но он не принимает строку '% [0-9]%. Как мне преобразовать вышеупомянутое утверждение в искровой SQL. пожалуйста помогите

Спасибо!

1 Ответ

1 голос
/ 12 октября 2019

Мой код для этого в 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|
   +------------------------------------+----------------------+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...