일부 열을 가릴 필요가있는 테이블이 있습니다. 마스크 할 열은 테이블마다 다르며이 열은 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
테이블이 다음 내가이 mask.foreach(c => base.withColumn(c, regexp_replace(col(c), "^.*?$", "*** Masked ***")))
처럼 뭔가를 시도했지만 아무것도 반환하지 않았다
+----+------+--------+----------+
| id | name | salary | tax_code |
+----+------+--------+----------+
| 1 | abcd | 12345 | KT10 |
+----+------+--------+----------+
| 2 | qazx | 98765 | AD12d |
+----+------+--------+----------+
val mask = Seq("name", "salary")
으로 순서에 마스크 열을 얻을 name
및 salary
열을 마스크합니다.
@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