将带有NULL值的字符串分类列转换为使用Spark中的StringIndexer加倍

时间:2016-03-20 10:36:15

标签: scala apache-spark categorical-data

我有一个带有一些分类字符串列的数据集,我想用double类型表示它们。我使用StringIndexer进行此转换并且它可以工作,但是当我在另一个具有NULL值的数据集中尝试它时,它会出现java.lang.NullPointerException错误并且无效。

为了更好地理解,这是我的代码:

for(col <- cols){
    out_name = col ++ "_"
    var indexer = new StringIndexer().setInputCol(col).setOutputCol(out_name)
    var indexed = indexer.fit(df).transform(df)
    df = (indexed.withColumn(col, indexed(out_name))).drop(out_name)
}

那么如何用StringIndexer解决这个NULL数据问题?

或者有没有更好的解决方案将字符串类型的分类数据转换为NULL值?

1 个答案:

答案 0 :(得分:1)

至于现在(Spark 1.6.1)这个问题还没有解决,但是有一个打开的JIRA(SPARK-11569)。不幸的是,找到一个可接受的行为并不容易。 SQL NULL表示缺失/未知值,因此任何索引都没有意义。

你可以做的最好的事情就是使用NA actions并放弃:

df.na.drop("column_to_be_indexed" :: Nil)

或填写:

 df2.na.fill("__HEREBE_DRAGONS__", "column_to_be_indexed" :: Nil)

在使用索引器之前。