替换Spark DataFrame中的空值

时间:2015-10-27 19:10:08

标签: scala apache-spark dataframe

我在这里看到了一个解决方案,但是当我尝试它时,它并不适合我。

首先我导入cars.csv文件:

val df = sqlContext.read
              .format("com.databricks.spark.csv")
              .option("header", "true")
              .load("/usr/local/spark/cars.csv")

如下所示:

+----+-----+-----+--------------------+-----+
|year| make|model|             comment|blank|
+----+-----+-----+--------------------+-----+
|2012|Tesla|    S|          No comment|     |
|1997| Ford| E350|Go get one now th...|     |
|2015|Chevy| Volt|                null| null|

然后我这样做:

df.na.fill("e",Seq("blank"))

但是空值并没有改变。

任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:27)

这基本上很简单。您需要创建一个新的DataFrame。我使用您之前定义的DataFrame df

val newDf = df.na.fill("e",Seq("blank"))

DataFrame不可变结构。 每次执行需要存储的转换时,您都需要将转换后的DataFrame影响为新值。

答案 1 :(得分:4)

你可以用这种方式在java中实现相同的目标

Dataset<Row> filteredData = dataset.na().fill(0);

答案 2 :(得分:0)

如果列是字符串类型,

val newdf= df.na.fill("e",Seq("blank"))

会工作的。

由于它是浮点类型(如图片所示),您需要使用

val newdf= df.na.fill(0.0, Seq("blank"))