我有一个使用Java的Spark大项目。我读取了一个csv文件,其中文件的行数超过1.000.000,其中一列是字符串。
当我尝试执行一个VectorAssembler以使用ML算法时,由于列“ Moon”是一个字符串,我遇到了一个错误。
因此,我正在尝试将此字符串转换为整数:
Dataset<Row> moons = typedMoons.withColumn("Moon", typedMoons.col("Moon").cast("Integer"));
但是当我这样做时,我在该列中得到了一个Null值。
因此,我尝试使用Java na.fill():
Dataset<Row> typedMoonsfinal = typedMoons.na().fill("Moon", typedMoons.col("Moon"));
但是我没有很好地使用fill()。
一些建议可以解决此问题?
非常感谢和问候。
答案 0 :(得分:0)
您不能仅将字符串转换为int,除非它是数字的字符串表示形式,例如“ 1234”。 “月亮”不是数字。
您需要做的是使用StringIndexer在字符串标签和数字之间建立关联。如果您通过StringIndexer传递字符串列,它将创建一个新的整数列,且原始列中的每个字符串都具有相同的值。因此,所有具有“ Moon”值的行将在新列中具有例如1的值,或者所有具有“ Sun”值的行在新列中将具有例如2的值。
您可以在VectorAssembler中使用此新的整数列。