Spark fillNa不替换null值

时间:2016-11-03 07:25:37

标签: hadoop apache-spark pyspark

我有以下数据集并且它包含一些空值,需要使用spark中的fillna替换空值。

数据帧:

df = spark.read.format("com.databricks.spark.csv").option("header‌​","true").load("/sam‌​ple.csv")

>>> df.printSchema();
root
 |-- Age: string (nullable = true)
 |-- Height: string (nullable = true)
 |-- Name: string (nullable = true)

>>> df.show()
+---+------+-----+
|Age|Height| Name|
+---+------+-----+
| 10|    80|Alice|
|  5|  null|  Bob|
| 50|  null|  Tom|
| 50|  null| null|
+---+------+-----+

>>> df.na.fill(10).show()

当我给出na值时,它不会改变,同样的数据帧再次出现。

+---+------+-----+
|Age|Height| Name|
+---+------+-----+
| 10|    80|Alice|
|  5|  null|  Bob|
| 50|  null|  Tom|
| 50|  null| null|
+---+------+-----+

尝试创建一个新的数据框并将填充值存储在数据框中,但结果显示为未更改。

>>> df2 = df.na.fill(10)

如何替换空值?请通过填写na给我可能的方法。 在此先感谢。

2 个答案:

答案 0 :(得分:10)

您的Height列似乎不是数字。当您调用df.na.fill(10)时,spark仅替换与10类型的列匹配的空值,这些列是数字列。

如果Height列需要为字符串,则可以尝试df.na.fill('10').show(),否则必须转换为IntegerType()

答案 1 :(得分:4)

如果您愿意,也可以为每列提供特定的默认值。

df.na.fill({'Height': '10', 'Name': 'Bob'})