我有这样的线:
LLC1R.8888.GR0054656*DR.798012...2..............GR0054656*EUR*
我已经提取了: REGEXP_EXTRACT(b.COLUMN_YY,'^([^\.]+)\.?',2)
但出现错误2:mapredtask
at org.apache.hadoop.hive.ql.exec.mr.ExecMapper.map(ExecMapper.java:157)
Caused by: org.apache.hadoop.hive.ql.metadata.HiveException: Unable to execute method public java.lang.String org.apache.hadoop.hive.ql.udf.UDFRegExpExtract.evaluate(java.lang.String,java.lang.String,java.lang.Integer) on object org.apache.hadoop.hive.ql.udf.UDFRegExpExtract@5875de6a of class org.apache.hadoop.hive.ql.udf.UDFRegExpExtract with arguments :java.lang.String, ^([^.]+).?:java.lang.String, 2:java.lang.Integer} of size 3
at org.apache.hadoop.hive.ql.exec.FunctionRegistry.invoke(FunctionRegistry.java:1024)
at org.apache.hadoop.hive.ql.udf.generic.GenericUDFBridge.evaluate(GenericUDFBridge.java:194)
at org.apache.hadoop.hive.ql.exec.ExprNodeGenericFuncEvaluator._evaluate(ExprNodeGenericFuncEvaluator.java:186)
at org.apache.hadoop.hive.ql.exec.ExprNodeEvaluator.evaluate(ExprNodeEvaluator.java:77)
Caused by: java.lang.reflect.InvocationTargetException
Caused by: java.lang.IndexOutOfBoundsException: No group 2
出了什么问题,应该如何修复?
任何帮助/想法都将不胜感激。谢谢您。
1条答案
按热度按时间lyr7nygr1#
很明显,错误堆栈跟踪中出现了什么错误:“caused by:java.lang.indexoutofboundsexception:no group 2”
看到了吗
REGEXP_EXTRACT
参考文献:返回使用模式提取的字符串。例如,
regexp_extract('foothebar', 'foo(.*?)(bar)', 2)
退货'bar.'
请注意,在使用预定义字符类时需要注意:使用'\s'
因为第二个参数与字母匹配s
;'\\s'
必须匹配空格等'index'
参数是java正则表达式匹配器group()
方法索引。有关“index”或java regex的更多信息,请参见docs/api/java/util/regex/matcher.htmlgroup()
方法。所以,要在
.
,您应该使用得到第二根弦
.
,使用得到第n个字符串
.
,使用(?:[^.]*\.){n-1}
. 所以,要得到第三个,使用请注意
1
索引参数使REGEXP_EXTRACT
返回在组1中捕获的值,请参见下面的模式详细信息:^
-字符串开头(?:[^.]*\.){2}
-这里有两次[^.]*
-0个或多个字符,而不是.
\.
-a.
烧焦([^.]*)
-组1:任何0个或更多字符.
.