Как условно удалить первые 2 символа из столбца - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть данные некоторых телефонных записей ниже, я хочу удалить первые два значения из каждой записи, так как они представляют собой код страны. Может кто-нибудь сообщить мне, как я могу сделать это, используя scala, spark или Hive.

phone
|917799423934|
|019331224595|
|  8981251522|
|917271767899|

Я бы хотел, чтобы результат был:

phone
|7799423934|
|9331224595|
|8981251522|
|7271767899|

Как мы можем удалить префикс 91,01 из каждой записи или каждой строки этого столбца.

Ответы [ 4 ]

0 голосов
/ 05 сентября 2018

Использование регулярных выражений

Используйте regexp_replace (добавьте дополнительные коды при необходимости):

select regexp_replace(trim(phone),'^(91|01)','') as phone --removes leading 91, 01 and all leading and trailing spaces
from table;

То же самое, используя regexp_extract:

select regexp_extract(trim(phone),'^(91|01)?(\\d+)',2) as phone --removes leading and trailing spaces, extract numbers except first (91 or 01) 
from table;
0 голосов
/ 05 сентября 2018

Улучшение, я считаю, предпочло бы список с содержанием или эквивалентом, но здесь идет речь:

import org.apache.spark.sql.functions._

case class Tel(telnum: String)
val ds = Seq(
     Tel("917799423934"),
     Tel("019331224595"),
     Tel("8981251522"),
     Tel("+4553")).toDS()

val ds2 = ds.withColumn("new_telnum", when(expr("substring(telnum,1,2)") === "91" || expr("substring(telnum,1,2)") === "01", expr("substring(telnum,3,length(telnum)-2)")).otherwise(col("telnum"))) 

ds2.show

возвращается:

+------------+----------+
|      telnum|new_telnum|
+------------+----------+
|917799423934|7799423934|
|019331224595|9331224595|
|  8981251522|8981251522|
|       +4553|     +4553|
+------------+----------+

Возможно, нам нужно подумать о +, но ничего не было сказано.

0 голосов
/ 05 сентября 2018

Если это строки, то для запроса Hive:

sql("select substring(phone,3) from table").show
0 голосов
/ 04 сентября 2018

Размер телефона может быть разным, можно использовать такую ​​конструкцию (Scala):

df.withColumn("phone", expr("substring(phone,3,length(phone)-2)"))
...