Java火花。 VectorAssembler 不接受 String 和 Null

Java Spark. VectorAssembler dont accept String and Null

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

当我尝试使用 VectorAssembler 来使用 ML 算法时出现错误,因为列 "Moon" 是一个字符串。

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

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

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

所以我正在尝试 na.fill() 与 Java:

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

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

解决这个问题的一些建议或其他方法?

非常感谢和问候。

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

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

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