Spark sql wie man explodiert ohne Nullwerte zu verlieren

Ich habe einen Datenrahmen, den ich zu reduzieren versuche. Als Teil des Prozesses möchte ich es auflösen. Wenn ich also eine Spalte mit Arrays habe, wird jeder Wert des Arrays verwendet, um eine separate Zeile zu erstellen. Zum Beispiel

id | name | likes
_______________________________
1  | Luke | [baseball, soccer]

soll werde

id | name | likes
_______________________________
1  | Luke | baseball
1  | Luke | soccer

Das ist mein Code

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;
}

Das Problem ist, dass in meinen Daten einige der Array-Spalten Nullen haben. In diesem Fall wird die gesamte Zeile gelöscht. Also dieser Datenrahmen:

id | name | likes
_______________________________
1  | Luke | [baseball, soccer]
2  | Lucy | null

wir

id | name | likes
_______________________________
1  | Luke | baseball
1  | Luke | soccer

Anstatt vo

id | name | likes
_______________________________
1  | Luke | baseball
1  | Luke | soccer
2  | Lucy | null

Wie kann ich meine Arrays auflösen, damit ich die Nullzeilen nicht verliere?

Ich verwende Spark 1.5.2 und Java 8

Antworten auf die Frage(6)

Ihre Antwort auf die Frage