Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
spark2.2.0中带有scala的Regexp_提取抛出错误_Scala_Apache Spark_Bigdata - Fatal编程技术网

spark2.2.0中带有scala的Regexp_提取抛出错误

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 ^ 请引导您需要避开反斜杠。

我的代码如下:

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,你的回答帮助我从不同的角度看待这个问题。