【问题标题】:Spark fillNa not replacing the null valueSpark fillNa 不替换空值
【发布时间】:2016-11-03 07:25:37
【问题描述】:

我有以下数据集,其中包含一些空值,需要在 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)

如何替换空值?请给我使用fill na的可能方法。 提前致谢。

【问题讨论】:

  • 有更换规则吗?例如,替换高度列中的空值是否与名称列不同?
  • 在我的情况下,如果应用了规则或未指定规则,则 null 值不会被替换。基本填充操作无法正常工作。检查不同的数据集。

标签: apache-spark pyspark


【解决方案1】:

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

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

【讨论】:

  • df.na.fill('10').show() 我会尝试使用此代码,但无法正常工作。我如何投射到int 任何示例?
  • 在这里您可以找到用于转换数据框列的文档:spark.apache.org/docs/latest/api/python/… - 'int' 类型或 IntegerType() 是用于存储数字的有效类型。
  • @Marisuz 感谢您提供的信息。现在我有一个疑问,我可以像这样直接填充像df.na.fill("sample")这样的字符串,而不是给出条件df.na.fill({'age': 50, 'name': 'sample'})
  • 是的,当然。查看文档。
  • 我会检查文档,但我没有找到任何适合我的案例。代替条件有什么可能的方法吗?
【解决方案2】:

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

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

【讨论】:

    猜你喜欢
    • 2020-02-26
    • 1970-01-01
    • 2017-10-21
    • 2016-01-27
    • 1970-01-01
    • 2020-04-16
    • 2021-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多