Spark Scala:如何去除DataFrame列中字符串的不间断尾随空格?
针对DataFrame中不间断尾随空格的解决方案
你遇到的应该是Unicode非标准空格(比如U+00A0不间断空格、U+2000系列宽空格等),这类空格不在普通\s或rtrim的默认处理范围内,试试下面这些针对性方法:
精准匹配Unicode不间断空格(U+00A0)
直接针对最常见的不间断空格做尾随替换:df.select( col("city"), regexp_replace(col("city"), "\u00A0+$", "").alias("trimmed_city") ).show()指定trim的目标字符集
Spark的trim函数支持自定义要去除的字符,同时覆盖普通空格和不间断空格:df.select( col("city"), trim(col("city"), "\u00A0 ").alias("trimmed_city") // 第二个参数是要去除的字符集合 ).show()匹配所有Unicode空格分隔符
用Unicode属性\p{Zs}匹配所有类型的空格字符(包括各种非标准空格),再去除尾随部分:df.select( col("city"), regexp_replace(col("city"), "\p{Zs}+$", "").alias("trimmed_city") ).show()转换非标准空格为普通空格后再trim
用translate把各种非标准空格转换成普通空格,再用rtrim处理:df.select( col("city"), rtrim(translate(col("city"), "\u00A0\u2002\u2003", " ")).alias("trimmed_city") ).show()先排查具体是什么字符
如果上面的方法都不行,先把字符串转成十六进制编码,确认空格的具体Unicode值:df.select( col("city"), col("city").encode("UTF-8").cast("string").alias("hex_encoding") ).show()比如U+00A0的UTF-8编码是
C2A0,找到对应编码后,直接用regexp_replace匹配该字节序列:df.select( col("city"), regexp_replace(col("city").cast("binary"), "C2A0$", "").cast("string").alias("trimmed_city") ).show()
内容的提问来源于stack exchange,提问作者Sumi
相关产品推荐
相关产品推荐

