lem*_*ter 2 regex scala apache-spark apache-spark-sql jupyter-notebook
我在Jupyter(Scala)笔记本中使用regexp_extract Spark 2.2 SQL函数来匹配包含11个或更多重复字符的字符串。
这是正则表达式:
^(.)\1{10,}$
Run Code Online (Sandbox Code Playgroud)
现在,让我们用regexp_extract函数查看该模式。这是我在笔记本中使用它的方式:
spark.sql("SELECT REGEXP_EXTRACT('hhhhhhhhhhhhh', '^(.)\\1{10,}$', 1) as ExtractedChar").show()
+-------------+
|ExtractedChar|
+-------------+
| |
+-------------+
Run Code Online (Sandbox Code Playgroud)
奇怪,没有输出。让我们确保我的regex模式是正确的。是的,看起来不错。
您可能想知道为什么正则表达式模式包含两个“ \\”字符,这是因为它是一个转义字符,所以两个是必需的。这是一些验证:
1. val string = "SELECT REGEXP_EXTRACT('hhhhhhhhhhhhhhhhhhhhh', '^(.)\\1{10,}$', 1) as ExtractedChar"
2. println(string)
SELECT REGEXP_EXTRACT('hhhhhhhhhhhhhhhhhhhhh', '^(.)\1{10,}$', 1) as ExtractedChar
Run Code Online (Sandbox Code Playgroud)
好吧,让我们确保regexp_extract函数正常工作:
spark.sqlContext.sql("SELECT REGEXP_EXTRACT('TESTING', '^.', 0) as test").show()
+----+
|test|
+----+
| T|
+----+
Run Code Online (Sandbox Code Playgroud)
好吧,也许问题是Jupyter笔记本?检查并使用Scala REPL之后,我仍然遇到相同的问题。
有什么想法为什么我无法使此正则表达式成功匹配吗?
编辑:Spark SQL是对此的要求。我可以使用Scala创建自己的UDF;但是,UDF用Spark装黑盒,这意味着它们不会得到完全优化。
| 归档时间: |
|
| 查看次数: |
1525 次 |
| 最近记录: |