【问题标题】:Regexp_extract in spark2.2.0 with scala throws error带有scala的spark2.2.0中的Regexp_extract抛出错误
【发布时间】: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+)"

标签: scala apache-spark bigdata


【解决方案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 的新列。

【讨论】:

  • 谢谢! 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。
猜你喜欢
  • 1970-01-01
  • 2014-08-22
  • 2015-06-29
  • 1970-01-01
  • 1970-01-01
  • 2014-11-17
  • 2021-09-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多