请不要将此问题标记为重复。我已经检查了以下问题,它为python或scala提供了解决方案。而且对于java方法是不同的。 How to replace null values with a specific value in Dataframe using spark in Java?
我有一个数据集Dataset<Row> ds
,该数据集是通过读取镶木地板文件创建的。因此,所有列值都是字符串。一些值是空的。我正在使用.na()。fill(“”)用空字符串替换空值
Dataset<Row> ds1 = ds.na().fill("");
但是它没有删除空值。我不明白是什么原因。
|-stopPrice:双精度(nullable = true) |-tradingCurrency:字符串(nullable = true)
答案 0 :(得分:1)
据我所见,您的列具有数字类型。同样,您不能在Spark中用无效值替换空值。因此,在您的情况下,不能使用字符串(在您的情况下为“”)。这是一个说明这一点的示例:
Dataset<Row> df = spark.range(10)
.select(col("id"),
when(col("id").mod(2).equalTo(lit(0)), null )
.otherwise(col("id").cast("string")).as("string_col"),
when(col("id").mod(2).equalTo(lit(0)), null )
.otherwise(col("id")).as("int_col"));
df.na().fill("").show();
这是结果
+---+----------+-------+
| id|string_col|int_col|
+---+----------+-------+
| 0| | null|
| 1| 1| 1|
| 2| | null|
| 3| 3| 3|
| 4| | null|
| 5| 5| 5|
| 6| | null|
| 7| 7| 7|
| 8| | null|
| 9| 9| 9|
+---+----------+-------+
它适用于字符串,但不适用于整数。请注意,我使用了cast
函数将一个int转换为字符串并使代码正常工作。在您遇到的情况下,这可能是一个不错的解决方法。