带有Scala的spark2.2.0中的Regexp_extract引发错误

时间:2018-09-28 14:24:33

标签: scala apache-spark bigdata

我的代码如下,

state.dir  我希望将“ extractedData”列输出为

val y = Seq(("100-200"),("300-400"),("500-600")).toDF("numbersData") .withColumn("extractedData",regexp_extract($"numbersData","(\d+)-(\d+)",1))

但是我收到了错误消息,

100 300 500

请指导

2 个答案:

答案 0 :(得分:1)

正如其他人指出的那样,在正则表达式模式"(\\d+)-(\\d+)"中使用双反斜杠将解决此问题-尽管无需使用像这样的简单模式的正则表达式。相反,您可以使用split

df.withColumn("extractedData", split($"numbersData", "-")(0)).show
// +-----------+-------------+
// |numbersData|extractedData|
// +-----------+-------------+
// |    100-200|          100|
// |    300-400|          300|
// |    500-600|          500|
// +-----------+-------------+

请注意,Regexsplit解决方案都将导致StringType列。如有必要,您也可以应用cast("Int")来创建IntegerType的新列。

答案 1 :(得分:0)

您需要转义反斜杠。试试这个

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>
相关问题