我的代码如下,
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
请指导
答案 0 :(得分: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的新列。
答案 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>