У меня есть датафрейм, который я пытаюсь сплющить. Как часть процесса, я хочу разобрать его, поэтому, если у меня есть столбец массивов, каждое значение массива будет использоваться для создания отдельной строки. Например,
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