Spark fillNa不替换null值

Chu*_*ins 8 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()
Run Code Online (Sandbox Code Playgroud)

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

+---+------+-----+
|Age|Height| Name|
+---+------+-----+
| 10|    80|Alice|
|  5|  null|  Bob|
| 50|  null|  Tom|
| 50|  null| null|
+---+------+-----+
Run Code Online (Sandbox Code Playgroud)

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

>>> df2 = df.na.fill(10)
Run Code Online (Sandbox Code Playgroud)

如何替换空值?请通过填写na给我可能的方法.提前致谢.

Mar*_*usz 14

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

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


小智 9

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

df.na.fill({'Height': '10', 'Name': 'Bob'})
Run Code Online (Sandbox Code Playgroud)