我有以下数据集并且它包含一些空值,需要使用spark中的fillna替换空值。
数据帧:
df = spark.read.format("com.databricks.spark.csv").option("header","true").load("/sample.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给我可能的方法。 在此先感谢。
答案 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'})