Spark SQL中有什么区别translate
和regexp_replace
功能.
我想替换字符串中的子字符串,整数值和其他数据类型,如布尔值.
例如.
func("hello","e","a") = "hallo" func(true,true ,false) = false func(112,112,9) = 9 func(112,115,9) = 112
我应该使用哪一个以及每个人有哪些优点/缺点?
根本不相同:
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机器.如果要替换字符串中的子字符串,那么这就是您要查找的字符串.
None适用于替换整个整数值和其他数据类型,如boolean.为此用途CASE ... WHEN ... OTHERWISE