【问题标题】:unable to remove trailing space in spark scala dataframe无法删除 spark scala 数据框中的尾随空格
【发布时间】:2018-01-14 18:36:36
【问题描述】:

我有一个DataFrame,我应用了不同的函数来替换尾随空格,但没有运气

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

请给点建议。

【问题讨论】:

    标签: scala apache-spark spark-dataframe space


    【解决方案1】:

    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()
    

    【讨论】:

    • 嗨 Tawkir 感谢您的回复!我尝试修剪或更改的正则表达式都没有工作,这也是一个字符串列。我不确定是什么问题:(
    • 你的 spark 版本是什么?
    • 2.2.0.2.6.3.0-235
    • 谢谢,问题是有一个 NUL 字符而不是一个空格,直到我在 sublime 中打开文件之前看起来像空格
    【解决方案2】:

    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|
    +----+------+
    

    【讨论】:

      猜你喜欢
      • 2020-10-15
      • 2011-08-28
      • 2015-04-27
      • 1970-01-01
      • 2021-08-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-04
      相关资源
      最近更新 更多