pyspark 如何替换Spark Dataframe 所有列中的多个字符?

vs3odd8k  于 2023-08-02  发布在  Spark
关注(0)|答案(3)|浏览(156)

我有一个包含多个列的dataframe。

>>> df.take(1)
[Row(A=u'{dt:dt=string, content=Prod}', B=u'{dt:dt=string, content=Staging}')]

字符串
我想从df的列'A'和'B'的值中删除花括号{}。我知道我们可以用途:

df.withColumn('A', regexp_replace('A', '//{', ''))
df.withColumn('A', regexp_replace('A', '//}', ''))
df.withColumn('B', regexp_replace('B', '//}', ''))


如何动态替换Spark dataframe所有列的字符?(Pandas版本如下所示)

df = df.replace({'{':'', '}':''}, regex=True)

8fsztsew

8fsztsew1#

使用正则表达式:

df.withColumn("A", regexp_replace("A", "[{}]", ""))

字符串

rlcwz9us

rlcwz9us2#

要修改 Dataframe df并将regexp_replace应用于listOfColumns给定的多个列,您可以使用foldLeft,如下所示:

val newDf = listOfColumns.foldLeft(df)((acc, x) => acc.withColumn(x, regexp_replace(col(x), ..., ...)))

字符串

xcitsw88

xcitsw883#

要将列表达式应用于PySpark中 Dataframe 的每一列,可以将Python的列表解析与Spark的select一起使用。例如:

df.select([column_expression for c in df.columns])

字符串
完整示例:

from pyspark.sql import functions as F
df = spark.createDataFrame(
    [('{dt:dt=string, content=Prod}', '{dt:dt=string, content=Staging}')],
    ['A', 'B'])

df = df.select([F.regexp_replace(c, '[{}]', '').alias(c) for c in df.columns])

df.show(truncate=0)
# +--------------------------+-----------------------------+
# |A                         |B                            |
# +--------------------------+-----------------------------+
# |dt:dt=string, content=Prod|dt:dt=string, content=Staging|
# +--------------------------+-----------------------------+

相关问题