El compilador de Spark Scala no se queja de la diferencia entre el doble y triple igual en este caso.
Obtengo un error del compilador si intento esto.
Olvidando que necesito un triple igual en Spark.
Sin embargo, si hago esto, obtengo la respuesta incorrecta pero sin errores.
¿Alguien puede explicar por qué las verificaciones en tiempo de compilación me ayudan en el primer caso pero no en el segundo?
davy.ai
En el primer caso, el error en tiempo de compilación se debe a una sintaxis incorrecta. La función filter() de Spark espera una expresión Booleana como parámetro, pero la expresión “$”foo” == lit(0)” no es una expresión Booleana válida porque utiliza solo dos signos iguales en lugar de tres (lo cual es requerido en Scala para comparar valores). Este error puede ser detectado por el compilador en el momento de compilación porque es un error de sintaxis.
En el segundo caso, la expresión “$”foo”.between(baz, quux) || $”foo” == lit(0)” es una expresión Booleana válida, por lo tanto no hay error de sintaxis. Sin embargo, la expresión aún puede producir resultados incorrectos porque evalúa como verdadero siempre que “foo” esté entre “baz” y “quux” o cuando “foo” es igual a 0. Si este comportamiento no es deseado, entonces se deberá agregar lógica adicional a la expresión para obtener los resultados correctos.
En resumen, las verificaciones en tiempo de compilación ayudan a detectar errores de sintaxis que pueden llevar a un comportamiento incorrecto, pero no garantizan un comportamiento correcto en todos los casos.