【问题标题】:Spark Regex regexp_extract error with backslash: Error in SQL statement: NullPointerException带有反斜杠的 Spark Regex regexp_extract 错误:SQL 语句中的错误:NullPointerException
【发布时间】:2021-09-08 09:39:58
【问题描述】:

我有一个数据集,我需要在其中提取域样式格式的别名:域\别名,其中别名位于反斜杠之后。尽管有几次尝试将反斜杠视为一个字符,但它似乎被视为一个转义字符。我首先使用已知的非转义字符(成功的正斜杠)测试了我的正则表达式模式。然后,我尝试了使用反斜杠的相同模式,然后使用我熟悉的方法进行了几次排列,以使正则表达式将反斜杠视为一个字符,而不是作为转义字符而不成功。你如何让这个正则表达式模式与 Spark 中的反斜杠一起工作?

正则表达式模式验证

select regexp_extract('domain/alias', '/(.*)') as test --Results: alias Works with forward slash.

排列和结果

select regexp_extract('domain\alias', '\(.*)') as test --Results: domainalias Removes the backslash for some reason

select regexp_extract('domain\alias', '"""\"""(.*)') as test --Results: empty string

select regexp_extract('domain\alias', '"""\\"""(.*)') as test --Results: empty string

select regexp_extract('domain\alias', '\\(.*)') as test --Results: Error in SQL statement: NullPointerException: 

select regexp_extract('domain\alias', '\\\(.*)') as test --Results: Error in SQL statement: NullPointerException: 

【问题讨论】:

    标签: regex apache-spark apache-spark-sql


    【解决方案1】:

    我可以通过调整火花设置来解决这个问题。在我使用的 Databricks 集群中,我运行了这个:

    set spark.sql.parser.escapedStringLiterals=true;
    

    我的正则表达式模式现在按预期工作:

    select regexp_extract('domain\alias', '\\(.*)') as test --Results: alias
    

    【讨论】:

      猜你喜欢
      • 2011-06-27
      • 2017-10-01
      • 1970-01-01
      • 2018-01-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-04
      • 2011-07-21
      • 2014-08-17
      相关资源
      最近更新 更多