Spark sql cómo explotar sin perder valores nulos
Tengo un Dataframe que estoy tratando de aplanar. Como parte del proceso, quiero explotarlo, así que si tengo una columna de matrices, cada valor de la matriz se usará para crear una fila separada. Por ejemplo,
id | name | likes
_______________________________
1 | Luke | [baseball, soccer]
debe convertirse
id | name | likes
_______________________________
1 | Luke | baseball
1 | Luke | soccer
Este es mi codigo
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;
}
El problema es que en mis datos, algunas de las columnas de la matriz tienen valores nulos. En ese caso, se elimina toda la fila. Entonces este marco de datos:
id | name | likes
_______________________________
1 | Luke | [baseball, soccer]
2 | Lucy | null
se convierte
id | name | likes
_______________________________
1 | Luke | baseball
1 | Luke | soccer
en lugar de
id | name | likes
_______________________________
1 | Luke | baseball
1 | Luke | soccer
2 | Lucy | null
¿Cómo puedo explotar mis matrices para no perder las filas nulas?
Estoy usando Spark 1.5.2 y Java 8