Pyspark 删除数据框列中的多个字符
Pyspark removing multiple characters in a dataframe column
查看 pyspark,我看到 translate
和 regexp_replace
可以帮助我找到数据框列中存在的单个字符。
我想知道是否有办法在 regexp_replace
或 translate
中提供多个字符串,以便解析它们并用其他内容替换它们。
用例:删除 A 列中的所有 $、# 和逗号 (,)
您可以使用 pyspark.sql.functions.translate()
进行多次替换。传入一串要替换的字母和另一个代表替换值的等长字符串。
例如,假设您有以下 DataFrame:
import pyspark.sql.functions as f
df = sqlCtx.createDataFrame([("0,00",),("#foobar",),("foo, bar, #, and $",)], ["A"])
df.show()
#+------------------+
#| A|
#+------------------+
#| 0,00|
#| #foobar|
#|foo, bar, #, and $|
#+------------------+
并想用 ('X', 'Y', 'Z')
替换 ('$', '#', ',')
。只需使用 translate
如:
df.select("A", f.translate(f.col("A"), "$#,", "XYZ").alias("replaced")).show()
#+------------------+------------------+
#| A| replaced|
#+------------------+------------------+
#| 0,00| X100Z00|
#| #foobar| Yfoobar|
#|foo, bar, #, and $|fooZ barZ YZ and X|
#+------------------+------------------+
如果您想删除 ('$', '#', ',')
的所有实例,您可以使用 pyspark.sql.functions.regexp_replace()
来完成。
df.select("A", f.regexp_replace(f.col("A"), "[$#,]", "").alias("replaced")).show()
#+------------------+-------------+
#| A| replaced|
#+------------------+-------------+
#| 0,00| 10000|
#| #foobar| foobar|
#|foo, bar, #, and $|foo bar and |
#+------------------+-------------+
模式"[$#,]"
表示匹配括号内的任意字符。 $
必须转义,因为它在正则表达式中有特殊含义。
如果有人需要在 scala 中执行此操作,您可以按以下代码执行此操作:
val df = Seq(("Test$",19),("$#,",23),("Y#a",20),("ZZZ,,",21)).toDF("Name","age")
import org.apache.spark.sql.functions._
val df1 = df.withColumn("NewName",translate($"Name","$#,","xyz"))
display(df1)
您可以看到如下输出:
查看 pyspark,我看到 translate
和 regexp_replace
可以帮助我找到数据框列中存在的单个字符。
我想知道是否有办法在 regexp_replace
或 translate
中提供多个字符串,以便解析它们并用其他内容替换它们。
用例:删除 A 列中的所有 $、# 和逗号 (,)
您可以使用 pyspark.sql.functions.translate()
进行多次替换。传入一串要替换的字母和另一个代表替换值的等长字符串。
例如,假设您有以下 DataFrame:
import pyspark.sql.functions as f
df = sqlCtx.createDataFrame([("0,00",),("#foobar",),("foo, bar, #, and $",)], ["A"])
df.show()
#+------------------+
#| A|
#+------------------+
#| 0,00|
#| #foobar|
#|foo, bar, #, and $|
#+------------------+
并想用 ('X', 'Y', 'Z')
替换 ('$', '#', ',')
。只需使用 translate
如:
df.select("A", f.translate(f.col("A"), "$#,", "XYZ").alias("replaced")).show()
#+------------------+------------------+
#| A| replaced|
#+------------------+------------------+
#| 0,00| X100Z00|
#| #foobar| Yfoobar|
#|foo, bar, #, and $|fooZ barZ YZ and X|
#+------------------+------------------+
如果您想删除 ('$', '#', ',')
的所有实例,您可以使用 pyspark.sql.functions.regexp_replace()
来完成。
df.select("A", f.regexp_replace(f.col("A"), "[$#,]", "").alias("replaced")).show()
#+------------------+-------------+
#| A| replaced|
#+------------------+-------------+
#| 0,00| 10000|
#| #foobar| foobar|
#|foo, bar, #, and $|foo bar and |
#+------------------+-------------+
模式"[$#,]"
表示匹配括号内的任意字符。 $
必须转义,因为它在正则表达式中有特殊含义。
如果有人需要在 scala 中执行此操作,您可以按以下代码执行此操作:
val df = Seq(("Test$",19),("$#,",23),("Y#a",20),("ZZZ,,",21)).toDF("Name","age")
import org.apache.spark.sql.functions._
val df1 = df.withColumn("NewName",translate($"Name","$#,","xyz"))
display(df1)
您可以看到如下输出: