如何使用Java中的火花在Dataframe中将空值替换为特定值?

2022-09-01 15:04:04

我正在尝试使用Java提高在Spark中实现的Logistic回归算法的准确性。为此,我正在尝试将列中存在的 Null 或无效值替换为该列中最常用的值。例如:-

Name|Place
a   |a1
a   |a2
a   |a2
    |d1
b   |a2
c   |a2
c   |
    |
d   |c1

在本例中,我将“Name”列中的所有 NULL 值替换为“a”,将“Place”列中的所有 NULL 值替换为 “a2”。到目前为止,我只能提取特定列中最常见的列。您能否帮助我完成第二步,了解如何将空值或无效值替换为该列中最常用的值。


答案 1

您可以使用函数(它是 org.apache.spark.sql.DataFrameNaFunctions 中的函数)。.na.fill

基本上,您需要的功能是:def fill(value: String, cols: Seq[String]): DataFrame

您可以选择列,然后选择要替换 null 或 NaN 的值。

在你的情况下,它将是这样的:

val df2 = df.na.fill("a", Seq("Name"))
            .na.fill("a2", Seq("Place"))

答案 2

您需要使用数据帧的 fill(String 值,String[] 列)方法,该方法会自动将给定列列表中的 Null 值替换为您指定的值。

因此,如果您已经知道要将 Null 替换为的值...:

String[] colNames = {"Name"}
dataframe = dataframe.na.fill("a", colNames)

您可以对其余列执行相同的操作。


推荐