Scala 如何检查';第1列和第27列;在+-20%的值范围';第2列和第27列;使用亚马逊Deequ?
所以,我在spark中使用Amazon Deequ,我有一个数据帧'df',其中两列的类型为'Long'或numeric。我只想检查一下:Scala 如何检查';第1列和第27列;在+-20%的值范围';第2列和第27列;使用亚马逊Deequ?,scala,dataframe,apache-spark,amazon-deequ,Scala,Dataframe,Apache Spark,Amazon Deequ,所以,我在spark中使用Amazon Deequ,我有一个数据帧'df',其中两列的类型为'Long'或numeric。我只想检查一下: value(column1)在所有行的value(column2)-20%和value(column2)+20%之间 我不确定在这里放什么支票: val verificationResult: VerificationResult = { VerificationSuite() .onData(df) .addCheck( Check(Che
value(column1)在所有行的value(column2)-20%和value(column2)+20%之间
我不确定在这里放什么支票:
val verificationResult: VerificationResult = { VerificationSuite()
.onData(df)
.addCheck(
Check(CheckLevel.Error, "Review Check")
//.funtionToCheckThis()
)
.run()
具有可以将列表达式作为条件参数的方法
要检查column1
是否介于-20%column2
和+20%column2
之间,可以使用如下表达式:
| column1-column2 |<0.20*column2
或
column1介于0.80*column2和1.20*column2之间
:
val verificationResult: VerificationResult = {
VerificationSuite()
.onData(df)
.addCheck(
Check(CheckLevel.Error, "Review Check")
.satisfies(
"abs(column1 - column2) <= 0.20 * column2",
"value(column1) lies between value(column2)-20% and value(column2)+20%"
)
).run()
}
val验证结果:验证结果={
验证套件()
.onData(df)
.addCheck(
检查(CheckLevel.Error,“查看检查”)
.满足(
“abs(第1列-第2列)谢谢。这就像预期的一样。作为一个附加组件,Deequ有没有办法只标记不符合此检查的行呢?比如,如果哪怕是一行失败,我们是否可以识别该行,比如说,它在'column3'中的值?@DebapratimChakraborty,据我所知,这是不可能的。但是要识别t您可以尝试使用Deequ中失败的约束的否定来过滤数据df。再次感谢-这也很好。最后一个问题-假设Deequ中的检查失败,它会给出一条约束消息,如:Value:0.76不满足约束要求!
这是否意味着我的76%数据失败e检查,24%通过?如果没有,那么我们在检查时有没有办法直接从Deequ获得该指标(%passed,%failed)?@DebapratimChakraborty0.76
表示“仅通过76%”