如何替换火花数据框所有列中的多个字符?

Posted

技术标签:

【中文标题】如何替换火花数据框所有列中的多个字符?【英文标题】:How can I replace multiple characters from all columns of a spark dataframe? 【发布时间】:2017-11-18 01:51:29 【问题描述】:

我有一个包含多列的数据框。

>>> 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 数据框的所有列动态替换字符? (熊猫版如下图)

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

【问题讨论】:

【参考方案1】:

只要使用正确的正则表达式:

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

【讨论】:

我们如何将上述语句同时应用于多个列?假设我的数据框中有 10 列。【参考方案2】:

要修改数据框df 并将regexp_replace 应用于listOfColumns 给出的多个列,您可以像这样使用 foldLeft:

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

【讨论】:

以上是关于如何替换火花数据框所有列中的多个字符?的主要内容,如果未能解决你的问题,请参考以下文章

如何删除列中的多个字符串并将其替换为日期

使用R函数将数据框列中的字符串替换为“”

如何用同一数据框中其他列的实际列值替换一列中的字符串值?

如何在火花中使用 Regexp_replace

将火花数据框列中的值提取到新的派生列中

替换数据框R列中的字符