spark2.2.0中带有scala的Regexp_提取抛出错误
我的代码如下: val y=Seq100-200300-400500-600.toDFnumbersData .withColumnextractedData,regexp\u extract$numbersData,\d+-\d+,1 我希望“extractedData”列的输出为 一百 300 五百 但我得到的错误是 错误:转义字符无效 .withColumnextractedData,regexp\u extract$numbersData,\d+-\d+,1 ^spark2.2.0中带有scala的Regexp_提取抛出错误,scala,apache-spark,bigdata,Scala,Apache Spark,Bigdata,我的代码如下: val y=Seq100-200300-400500-600.toDFnumbersData .withColumnextractedData,regexp\u extract$numbersData,\d+-\d+,1 我希望“extractedData”列的输出为 一百 300 五百 但我得到的错误是 错误:转义字符无效 .withColumnextractedData,regexp\u extract$numbersData,\d+-\d+,1 ^ 请引导您需要避开反斜杠。
请引导您需要避开反斜杠。试试这个
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>
你需要避开反斜杠。试试这个
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>
正如其他人所指出的那样,在正则表达式模式\\d+-\\d+中使用双反斜杠可以解决这个问题——尽管正则表达式不需要这样简单的模式。相反,您可以使用拆分:
请注意,正则表达式和拆分解决方案都将生成StringType列。如有必要,您也可以应用castInt来创建IntegerType的新列。正如其他人所指出的,在正则表达式模式\\d+-\\d+中使用双反斜杠可以解决问题–尽管没有必要使用这样简单的正则表达式模式。相反,您可以使用拆分:
请注意,正则表达式和拆分解决方案都将生成StringType列。如有必要,您也可以应用castInt来创建IntegerType的新列。必须使用双转义:\\d+-\\d+必须使用双转义:\\d+-\\d+谢谢!非常感谢,谢谢!非常感谢,谢谢!利奥C,你们的回答帮助我从不同的角度看待这个问题。谢谢!利奥C,你的回答帮助我从不同的角度看待这个问题。