Java Spark。 VectorAssembler不接受String和Null

时间:2018-09-28 11:03:13

标签: apache-spark apache-spark-sql apache-spark-mllib apache-spark-ml apache-spark-dataset

我有一个使用Java的Spark大项目。我读取了一个csv文件,其中文件的行数超过1.000.000,其中一列是字符串。

当我尝试执行一个VectorAssembler以使用ML算法时,由于列“ Moon”是一个字符串,我遇到了一个错误。

因此,我正在尝试将此字符串转换为整数:

Dataset<Row> moons = typedMoons.withColumn("Moon", typedMoons.col("Moon").cast("Integer"));

但是当我这样做时,我在该列中得到了一个N​​ull值。

因此,我尝试使用Java na.fill():

        Dataset<Row> typedMoonsfinal = typedMoons.na().fill("Moon", typedMoons.col("Moon"));

但是我没有很好地使用fill()。

一些建议可以解决此问题?

非常感谢和问候。

1 个答案:

答案 0 :(得分:0)

您不能仅将字符串转换为int,除非它是数字的字符串表示形式,例如“ 1234”。 “月亮”不是数字。

您需要做的是使用StringIndexer在字符串标签和数字之间建立关联。如果您通过StringIndexer传递字符串列,它将创建一个新的整数列,且原始列中的每个字符串都具有相同的值。因此,所有具有“ Moon”值的行将在新列中具有例如1的值,或者所有具有“ Sun”值的行在新列中将具有例如2的值。

您可以在VectorAssembler中使用此新的整数列。