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 中使用这个新的整数列。
我有一个使用 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 中使用这个新的整数列。