我有一些表格,我需要掩盖它的一些列。要屏蔽的列因表而不同,我正在阅读application.conf
文件中的那些列。如何使用Spark 2遮罩列?
例如,对于员工表如下图所示
+----+------+-----+---------+
| id | name | age | address |
+----+------+-----+---------+
| 1 | abcd | 21 | India |
+----+------+-----+---------+
| 2 | qazx | 42 | Germany |
+----+------+-----+---------+
如果我们想掩盖姓名和年龄列然后我的序列中获得这些列。
val mask = Seq("name", "age")
屏蔽之后的预期值是:
+----+----------------+----------------+---------+
| id | name | age | address |
+----+----------------+----------------+---------+
| 1 | *** Masked *** | *** Masked *** | India |
+----+----------------+----------------+---------+
| 2 | *** Masked *** | *** Masked *** | Germany |
+----+----------------+----------------+---------+
如果我有职员表的数据帧,那么什么是掩盖这些列的方式吗?
如果我有payment
表如下图所示,要屏蔽name
和salary
列然后我得到面具列顺序
+----+------+--------+----------+
| id | name | salary | tax_code |
+----+------+--------+----------+
| 1 | abcd | 12345 | KT10 |
+----+------+--------+----------+
| 2 | qazx | 98765 | AD12d |
+----+------+--------+----------+
val mask = Seq("name", "salary")
我想是这样的mask.foreach(c => base.withColumn(c, regexp_replace(col(c), "^.*?$", "*** Masked ***")))
但它并没有返回任何东西。
感谢@philantrovert,我找到了解决方案。这里是我使用的解决方案:
def maskData(base: DataFrame, maskColumns: Seq[String]) = {
val maskExpr = base.columns.map { col => if(maskColumns.contains(col)) s"'*** Masked ***' as ${col}" else col }
base.selectExpr(maskExpr: _*)
}
谢谢。有效 – Shekhar