translate和regexp_replace

时间:2017-01-20 08:16:03

标签: apache-spark apache-spark-sql

Spark SQL中translateregexp_replace函数之间有什么区别。

我想替换字符串中的子字符串,整数值和其他数据类型,如boolean。

例如。

func("hello","e","a") = "hallo"
func(true,true ,false) = false
func(112,112,9) = 9
func(112,115,9) = 112

我应该使用哪一个以及每个人有哪些优点/缺点?

1 个答案:

答案 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