【发布时间】:2020-03-05 05:39:14
【问题描述】:
我正在努力检测给定数据集(火花)中的 PI/SI 信息。我有如下规则(csv 格式)
Rule_No,Target,Pattern,Fuzzy_Match,EPDR,Category,Active
1,Name,name,true,PI - Name,General/ID,true
1,Name,identity,true,PI - Name,General/ID,true
1,Content,Smith,true,PI - Name,General/ID,true
1,Content,Jones,true,PI - Name,General/ID,true
1,Content,Williams,true,PI - Name,General/ID,true
5,Name,Gender,true,PI - Gender,General/ID,true
5,Content,M,false,PI - Gender,General/ID,true
5,Content,F,false,PI - Gender,General/ID,true
5,Content,Male,false,PI - Gender,General/ID,true
5,Content,Female,false,PI - Gender,General/ID,true
我要做的是遍历数据集列并应用这些规则中的每一个来检查特定列是否具有 PII。
所以说如果我有一个名为name 的列,并且给定的规则说用模式扫描这个列的内容说Smith。如果我找到匹配项,我将知道此列是 PI 列,然后移至下一列并应用每条规则,直到找到匹配项。
我正在使用嵌套的理解来迭代列列表和规则列表。我想要的是当我找到一个匹配项时,我想移到下一列而不是应用剩余的规则。
我写过这样的代码
for {
c <- ds.columns.toList
rule <- rules if rule.active && checkPII(ds, c, rule.target, rule.pattern, rule.fuzzyMatch)
} yield {
<return PII information>
}
但这会将每个规则应用于同一列,即使它匹配。如何移动到下一列而不是继续应用剩余规则?
【问题讨论】: