在pyspark中删除null / space字符

2admgd59  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(101)

我在一个pyspark字符串中有前导字符和尾随字符。但是trim和regex_replace似乎对他们不起作用。可能有一些空的unicode字符。我的问题是
1.如何识别这些字符?(复制和粘贴只是复制一个空白空间)
1.有办法摆脱他们吗
这些是我迄今为止采取的步骤

df = df.withColumn("email", F.encode(F.col("email"), "UTF-8"))
df = df.withColumn("email", F.regexp_replace(F.col("email"), " ", ""))
df = df.withColumn("email", F.regexp_replace(F.col("email"), "\u0000", ""))
df = df.withColumn("email", F.trim(F.col("email")))
df = df.withColumn("length", F.length(F.col("email")))
df.select("email", "length").display()

这是输出

PS:当我尝试复制一个字符串并使用python做一个strip时,它会去掉空格

" [email protected]".strip()
# '[email protected]'

用这个做一个udf也可以

def strip(value):
    return value.strip()

stripUdf = F.udf(strip, T.StringType())

但由于性能问题,

b4lqfgs4

b4lqfgs41#

您可以尝试相反的方法,删除任何 * 不是 * 字母数字字符的符号或符号.@。举例来说:

df.withColumn(
    "clean_email", F.regexp_replace(F.col("email"), "[^A-Za-z0-9\.\@]", "")
).withColumn(
    "clean_email_length", F.length('clean_email')
)

+----------------+--------------+------------------+
|           email|   clean_email|clean_email_length|
+----------------+--------------+------------------+
|  [email protected] | [email protected]|                13|
| [email protected]� | [email protected]|                13|
|[email protected]□ |[email protected]|                14|
+----------------+--------------+------------------+

相关问题