【发布时间】:2017-02-05 22:27:55
【问题描述】:
我有一个要展平的数据框。作为该过程的一部分,我想将其分解,因此如果我有一列数组,则数组的每个值都将用于创建单独的行。例如,
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
【问题讨论】:
标签: java apache-spark null apache-spark-sql