Spark SQL中translate
和regexp_replace
函数之间有什么区别。
我想替换字符串中的子字符串,整数值和其他数据类型,如boolean。
例如。
func("hello","e","a") = "hallo"
func(true,true ,false) = false
func(112,112,9) = 9
func(112,115,9) = 112
我应该使用哪一个以及每个人有哪些优点/缺点?
答案 0 :(得分:6)
根本不相同:
translate
用于将一个字符表逐字翻译为另一个字符表。它不关心上下文,它不使用正则表达式,它只考虑手头的字符。从您提供的示例中,唯一适用的是单个字母替换:
spark.sql("SELECT TRANSLATE('hello', 'e', 'a')").show()
+----------------------+
|translate(hello, e, a)|
+----------------------+
| hallo|
+----------------------+
通常translate
对处理无效字符和其他简单清理任务很有用。它编写简单,运行时开销很小:
spark.sql("SELECT TRANSLATE('ed-ba', 'abcde', '12345')").show()
+------------------------------+
|translate(ed-ba, abcde, 12345)|
+------------------------------+
| 54-21|
+------------------------------+
regexp_replace
。这正是它所说的。您可以使用完整的Java regexp机器。如果想要替换字符串中的子字符串,那么这就是您要查找的字符串。
无适用于替换整数值和其他数据类型,如boolean 。对于此用途CASE ... WHEN ... OTHERWISE