regex - 带有反斜杠的 Spark Regex regexp_extract 错误:SQL 语句中的错误:NullPointerException
问题描述
我有一个数据集,我需要在其中提取域样式格式的别名:域\别名,其中别名在反斜杠之后。反斜杠似乎被视为转义字符,尽管有几次尝试将其视为字符。我首先使用已知的非转义字符(成功的正斜杠)测试了我的正则表达式模式。然后,我尝试了使用反斜杠的相同模式,然后使用我熟悉的方法进行了几次排列,以使正则表达式将反斜杠视为一个字符,而不是作为转义字符而不成功。你怎么做才能让这个正则表达式模式与火花中的反斜杠一起工作?
正则表达式模式验证
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:
解决方案
我能够通过调整火花设置来解决这个问题。在我使用的 Databricks 集群中,我运行了这个:
set spark.sql.parser.escapedStringLiterals=true;
我的正则表达式模式现在按预期工作:
select regexp_extract('domain\alias', '\\(.*)') as test --Results: alias
推荐阅读
- android - 如何在 react-native 上添加 android.support.v7.app
- bash - 如何归档文件名中日期超过 x 天的文件
- junit5 - ArchUnit 测试实际的分层架构
- qt - 遍历树项的所有子项
- java - 为什么几秒钟后我的刷新比开始后立即刷新要慢
- node.js - bulkWrite - 类型错误:无法在 applyTimestampsToUpdate 的数字 '0' 上创建属性 '$set' - mongoose 或 mongodb
- c# - WCF 客户端,XML 命名空间前缀导致空对象
- java - 如何为 ExecutorServices 编写测试用例?
- intellij-idea - IntelliJ 不会从 Lombok 找到生成的代码,而 gradle 会
- c# - 为什么我无法在 LINQ Select() 查询中向 StringBuilder 插入值