带有scala的spark2.2.0中的Regexp_extract抛出错误
Posted
技术标签:
【中文标题】带有scala的spark2.2.0中的Regexp_extract抛出错误【英文标题】:Regexp_extract in spark2.2.0 with scala throws error 【发布时间】:2018-09-28 14:24:32 【问题描述】:我的代码如下,
val y = Seq(("100-200"),("300-400"),("500-600")).toDF("numbersData")
.withColumn("extractedData",regexp_extract($"numbersData","(\d+)-(\d+)",1))
我想将“extractedData”列输出为,
100
300
500
但是我得到了错误,
error: invalid escape character
.withColumn("extractedData",regexp_extract($"numbersData","(\d+)-(\d+)",1))
^
请指导
【问题讨论】:
必须使用双重转义:"(\\d+)-(\\d+)" 【参考方案1】:正如其他人所指出的,在您的正则表达式模式"(\\d+)-(\\d+)"
中使用双反斜杠将解决问题——尽管不需要像这样简单模式的正则表达式。相反,您可以使用split
:
df.withColumn("extractedData", split($"numbersData", "-")(0)).show
// +-----------+-------------+
// |numbersData|extractedData|
// +-----------+-------------+
// | 100-200| 100|
// | 300-400| 300|
// | 500-600| 500|
// +-----------+-------------+
请注意,Regex
和 split
解决方案都将生成 StringType 列。如有必要,您也可以申请cast("Int")
来制作IntegerType 的新列。
【讨论】:
谢谢! Leo C,你的回答帮助我从不同的角度看待问题。【参考方案2】:您需要转义反斜杠。试试这个
scala> val y = Seq(("100-200"),("300-400"),("500-600")).toDF("numbersData").withColumn("extractedData",regexp_extract($"numbersData","(\\d+)-(\\d+)",1)).show()
+-----------+-------------+
|numbersData|extractedData|
+-----------+-------------+
| 100-200| 100|
| 300-400| 300|
| 500-600| 500|
+-----------+-------------+
y: Unit = ()
scala>
【讨论】:
谢谢!非常堆栈0114106。以上是关于带有scala的spark2.2.0中的Regexp_extract抛出错误的主要内容,如果未能解决你的问题,请参考以下文章