Spark fillNa 不替换空值
Posted
技术标签:
【中文标题】Spark fillNa 不替换空值【英文标题】:Spark fillNa not replacing the null value 【发布时间】:2016-11-03 07:25:37 【问题描述】:我有以下数据集,其中包含一些空值,需要在 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)
如何替换空值?请给我使用fill na的可能方法。 提前致谢。
【问题讨论】:
有更换规则吗?例如,替换高度列中的空值是否与名称列不同? 在我的情况下,如果应用了规则或未指定规则,则 null 值不会被替换。基本填充操作无法正常工作。检查不同的数据集。 【参考方案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')
【讨论】:
以上是关于Spark fillNa 不替换空值的主要内容,如果未能解决你的问题,请参考以下文章
automapper如何全局配置map条件过滤null值空值对所有映射起效
如何使用scala在Apache spark中用空字符串(“”)替换空值[重复]