需要查找含有特殊字符的记录。允许的字符是 连字符、逗号、正斜杠 (/)、井号和点以及撇号 (')。
In the AZURE Databricks Table having few data like
L'ÎLE-PERROT -- Invalid
CHÉNÉVILLE -- Invalid
1205-RUE DE L'ACADIE - Valid
'4th Floor - InterContinental - Valid
VAL D'OR -- Valid
O'LEARY -- Valid
Bucure¿ti -- Invalid
LA DORÉ - Invalid
我尝试了三种方法。通过使用所有这些方法,带有撇号 (') 的值将被跳过进行验证。
通过使用正则表达式
(REGEXP(TRIM(column1 ), '[^a-zA-Z0-9,-\-/#''\s]')
通过使用rlike
(column1 rlike '[a-zA-Z0-9\\-,/#''\\s]')
通过使用翻译
(TRANSLATE(column1, 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789,/#. -') = '')
检查下面的代码。
scala> df
.withColumn(
"new_data", regexp_replace($"data", "[^a-zA-Z0-9,-/#. ']+", "")
)
.withColumn(
"output",
when(
$"data" === $"new_data", lit("valid"))
.otherwise("invalid")
)
.show(false)
+-----------------------------+-----------------------------+-------+
|data |new_data |output |
+-----------------------------+-----------------------------+-------+
|L'ÎLE-PERROT |L'LE-PERROT |invalid|
|CHÉNÉVILLE |CHNVILLE |invalid|
|1205-RUE DE L'ACADIE |1205-RUE DE L'ACADIE |valid |
|'4th Floor - InterContinental|'4th Floor - InterContinental|valid |
|VAL D'OR |VAL D'OR |valid |
|O'LEARY |O'LEARY |valid |
|Bucure¿ti |Bucureti |invalid|
|LA DORÉ |LA DOR |invalid|
+-----------------------------+-----------------------------+-------+