必须通过剥离符号 ^ 字符的最后一次出现以通过正则表达式提取结束来提取单词的开头
Posted
技术标签:
【中文标题】必须通过剥离符号 ^ 字符的最后一次出现以通过正则表达式提取结束来提取单词的开头【英文标题】:Have to extract the start of word by stripping the last occurrence of symbol ^ characters to end by regex extract 【发布时间】:2018-06-10 12:10:17 【问题描述】:我想在 hive 中使用 regex_replace 或 regexp_extract,我只能得到特殊字符 "^" 的前 n 次出现,除了最后一次出现和最后一次出现的文本发生。 F 例如:
101^11
应该提取 101
101^1111^232
应该提取 101^1111
144^899^890^1
应该提取 1144^899^890
我只需要处理正则表达式,而不需要处理字符串函数或 udf。
【问题讨论】:
这不行吗? ***.com/questions/8374742/regex-last-occurrence 【参考方案1】:试试 regexp_extract 函数
在蜂巢中:
hive> select regexp_extract('101^11',"(.*)\\^",1)
+------+--+
| _c0 |
+------+--+
| 101 |
+------+--+
在 Scala 中:
scala> val hiveContext = new HiveContext(sc)
scala> val df= hiveContext.sql("""select regexp_extract('101^11','(.*)\\\^',1)""");
scala> df.show()
+---+
|_c0|
+---+
|101|
+---+
在 Pyspark 中:
>>> hiveContext=HiveContext(sc)
>>> df=hiveContext.sql("select regexp_extract('101^11','(.*)\\\^',1)")
>>> df.show()
+---+
|_c0|
+---+
|101|
+---+
【讨论】:
我已经尝试过这个例子,它是成功的。感谢您的快速帮助。 如果我尝试使用 spark sql 进行相同的查询,则不会为提取列返回数据。 DataFrame df= hiveContext.sql("select regexp_extract(eid,'(.*)\\^',1) as eid1,name from employee"); System.out.println("模式"+df.schema()); System.out.println("第一条记录"+df.first());第一条记录[,耙] 请用三引号括起来val df= hiveContext.sql("""select regexp_extract('101^11','(.)\\^' ,1)""");* 它应该可以工作..!! 我正在尝试使用 spark sql java,它在 eclipse 中显示三引号错误。以上是关于必须通过剥离符号 ^ 字符的最后一次出现以通过正则表达式提取结束来提取单词的开头的主要内容,如果未能解决你的问题,请参考以下文章