Entonces, ejecuté una simple verificación de Deequ en Spark, que fue algo como esto:

val verificationResult: VerificationResult = { VerificationSuite()
  .onData(dataset)
  .addCheck(
    Check(CheckLevel.Error, "Review Check")
      .isComplete("col1")
      .isUnique("col2")
      .hasSize(_ == count_date)
      .satisfies(
          "abs(col4 - col5) <= 0.20 * col5",
          "value(col4) lies between value(col5)-20% and value(col5)+20%"
    )
  .run()
}

val result1 = checkResultsAsDataFrame(spark, verificationResult)

Ahora, mi marco de datos result1 se parece a esto:

+------------+-----------+------------+--------------------+-----------------+--------------------+
|       check|check_level|check_status|          constraint|constraint_status|  constraint_message|
+------------+-----------+------------+--------------------+-----------------+--------------------+
|Review Check|      Error|       Error|CompletenessConst...|          Success|                    |
|Review Check|      Error|       Error|UniquenessConstra...|          Failure|Value: 7.62664794...|
|Review Check|      Error|       Error|SizeConstraint(Si...|          Success|                    |
|Review Check|      Error|     Success|ComplianceConstra...|          Success|                    |
+------------+-----------+------------+--------------------+-----------------+--------------------+

Estoy confundido entre las columnas check_status y constraint_status. ¿En qué se diferencian? Los resultados de mis controles deberían estar en este último ¿verdad? Entonces, ¿qué implica el primero?

No pude encontrar ninguna claridad sobre esto en el blog de deequ tampoco. ¿Podría alguien explicarme?

0
Debapratim Chakraborty 26 feb. 2021 a las 09:00

1 respuesta

La mejor respuesta

check_status es el estado general del grupo Check que ejecuta. Depende de CheckLevel y del estado de la restricción. Si observa el código:

val anyFailures = constraintResults.exists { _.status == ConstraintStatus.Failure }

val checkStatus = (anyFailures, level) match {
  case (true, CheckLevel.Error) => CheckStatus.Error
  case (true, CheckLevel.Warning) => CheckStatus.Warning
  case (_, _) => CheckStatus.Success
}

Si hay alguna falla en las restricciones, entonces check_status = CheckLevel. De lo contrario, es un éxito.

2
blackbishop 26 feb. 2021 a las 08:29