How to remove nulls with array_remove Spark SQL Built-in Function

后端 未结 3 1352
攒了一身酷
攒了一身酷 2020-12-16 17:33

Spark 2.4 introduced new useful Spark SQL functions involving arrays but I was a little bit puzzled when I find out that the result of: select array_remove(array(1, 2,

相关标签:
3条回答
  • 2020-12-16 17:58

    To answer your first question, Is this an expected behavior? , Yes. Because the official notebook(https://docs.databricks.com/_static/notebooks/apache-spark-2.4-functions.html) points out "Remove all elements that equal to the given element from the given array." and NULL corresponds to undefined values & the results will also not defined.

    So,I think NULL s are out of the purview of this function.

    Better you found out a way to overcome this, you can also use spark.sql("""SELECT array_except(array(1, 2, 3, 3, null, 3, 3,3, 4, 5), array(null))""").show() but the downside is that the result will be without duplicates.

    0 讨论(0)
  • 2020-12-16 18:06

    You can do something like this in Spark 2:

    import org.apache.spark.sql.functions._
    import org.apache.spark.sql._
    
    /**
      * Array without nulls
      * For complex types, you are responsible for passing in a nullPlaceholder of the same type as elements in the array
      */
    def non_null_array(columns: Seq[Column], nullPlaceholder: Any = "רכוב כל יום"): Column =
      array_remove(array(columns.map(c => coalesce(c, lit(nullPlaceholder))): _*), nullPlaceholder)
    

    In Spark 3, there is new array filter function and you can do:

    df.select(filter(col("array_column"), x => x.isNotNull))
    
    0 讨论(0)
  • 2020-12-16 18:11

    https://docs.databricks.com/_static/notebooks/apache-spark-2.4-functions.html

    array_remove(array, T): array Remove all elements that equal to the given element from the given array.

    Note: I only referred the documentation and they have taken the same data. **null can never be equal to null.

    0 讨论(0)
提交回复
热议问题