首页 > 解决方案 > Spark Java - 用数据集中的另一个字符串替换特定字符串

问题描述

我正在编写 spark 应用程序,其中有 100 个字段的数据集。我想在所有 100 个字段中用 acct 替换“Account”。

dataset.show();

+-------+-------+---------+-------------------------------|
|   id  |    loc| price   |description|postdate           | 
+-------+-------+---------|-----------+-------------------+
|001    |account|315000.25|account    |2020-06-01         |
|account|account|account  |sampledes  |2020-06-05         |
|003    |kochin |315000   |           |account            |
|004    |madurai|null     |abc        |                   |
|005    |account|15000.20 |n.a        |2021/12/01         |
+-------+-------+---------+-----------+-------------------|

结果:- 在所有字段中将帐户替换为帐户。

+-------+-------+---------+-------------------------------|
|   id  |    loc| price   |description|postdate           | 
+-------+-------+---------|-----------+-------------------+
|001    |acct   |315000.25|acct       |2020-06-01         |
|acct   |acct   |acct     |sampledes  |2020-06-05         |
|003    |kochin |315000   |           |acct               |
|004    |madurai|null     |abc        |                   |
|005    |acct   |15000.20 |n.a        |2021/12/01         |
+-------+-------+---------+-----------+-------------------|

我看到了正则表达式替换功能,但我们必须为每一列编写。所以我正在寻找替代方案。

提前致谢

标签: apache-spark

解决方案


你不能尝试这个迭代所有列并用替换字符更新列的代码

oldDF.show()
val newDF = oldDF.columns.foldLeft(oldDF) { (replaceDF, colName) =>
  replaceDF.withColumn(
    colName,
    regexp_replace(col(colName), "account", "acct ")
  )
}
newDF.show()

推荐阅读