如何替换spark数据帧的所有列中的多个字符?

时间:2017-11-18 01:51:29

标签: python pandas apache-spark spark-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数据帧的所有列动态替换字符? (熊猫版本如下所示)

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

2 个答案:

答案 0 :(得分:2)

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

SELECT  SUM(e.Quantity) AS SumQuantity

FROM  MY_TABLE,
      XMLTABLE('/Receive/ReceiptDetails/ReceiptDetail' 
      PASSING XMLTYPE(MY_TABLE.MY_XML_COLUMN)

      COLUMNS
        Quantity NUMBER PATH 'Quantity') as e

答案 1 :(得分:1)

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

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