无法删除 spark scala 数据框中的尾随 space

unable to remove trailing space in spark scala dataframe

我有一个 DataFrame 并且我应用了不同的函数来替换尾随 space 但是没有运气

df.select(col("e_no"),regexp_replace(col("e_no"),"//s+$",""),rtrim(col("e_no")),length(col("e_no"))).show()

e_no   | regexp_replace(e_no),//s+$, )| rtrim(e_no)|  length(e_no)
525071 |          525071 |              525071 |      7
512938|           512938|               512938|       6
522783 |          522783 |              522783 |      7

请指教。

rtrim 函数应该可以工作。至于正则表达式替换,正确的正则表达式将是

"\s+$"

使用 spark 的工作代码:2.2.1

import spark.implicits._
import org.apache.spark.sql.functions._

val list = Seq("525071 ", "512938", "522783 ")
val df = list.toDF("e_no")

df.select(
  col("e_no"),
  regexp_replace(col("e_no"), "\s+$", ""),
  rtrim(col("e_no")),
  length(col("e_no"))
).show()

使用withColumn方法是我理解的最简单的方法:

import org.apache.spark.sql.functions._

val newDF = rawDF.withColumn("e_no", rtrim(col("e_no")))
 newDF.show()

您也可以使用 UDF,但这可能会导致问题过大。不管怎样,习惯使用 UDF 是很有用的,它们非常有帮助

val removeTrailingWhitespaces = (s:String) => {
  s.trim
}

val removeTrailingWhitespacesUdf = functions.udf(removeTrailingWhitespaces)

val newDF = rawDF
  .withColumn("e_no", removeTrailingWhitespacesUdf(rawDF("e_no")))

newDF.show()

我已经 运行 对这两个选项进行了一些测试:

输入:

H  ,173 
M,161

输出

+----+------+
|   H|   173|
|   M|   161|
+----+------+