Spark SQL如何爆炸而不会丢失空值

我有一个要拼合的数据框。作为该过程的一部分,我想爆炸它,因此,如果我有一列数组,则将使用数组的每个值来创建单独的行。例如,


id | name | likes

_______________________________

1  | Luke | [baseball, soccer]

应该成为


id | name | likes

_______________________________

1  | Luke | baseball

1  | Luke | soccer

这是我的代码


private DataFrame explodeDataFrame(DataFrame df) {

    DataFrame resultDf = df;

    for (StructField field : df.schema().fields()) {

        if (field.dataType() instanceof ArrayType) {

            resultDf = resultDf.withColumn(field.name(), org.apache.spark.sql.functions.explode(resultDf.col(field.name())));

            resultDf.show();

        }

    }

    return resultDf;

}

问题是在我的数据中,某些数组列具有空值。在这种情况下,整个行将被删除。所以这个数据帧:


id | name | likes

_______________________________

1  | Luke | [baseball, soccer]

2  | Lucy | null

变成


id | name | likes

_______________________________

1  | Luke | baseball

1  | Luke | soccer

代替


id | name | likes

_______________________________

1  | Luke | baseball

1  | Luke | soccer

2  | Lucy | null

如何爆炸数组,以免丢失空行?


我正在使用Spark 1.5.2和Java 8


弑天下
浏览 434回答 3
3回答

函数式编程

您可以使用explode_outer()功能。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java