如何使用Java中的spark在Dataframe中使用特定值替换空值?

Pir*_*ack 20 java apache-spark

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

Name|Place
a   |a1
a   |a2
a   |a2
    |d1
b   |a2
c   |a2
c   |
    |
d   |c1
Run Code Online (Sandbox Code Playgroud)

在这种情况下,我将"Name"列中的所有NULL值替换为"a",将"Place"替换为"a2"列.到目前为止,我只能提取特定列中最常见的列.关于如何用该列的最常用值替换空值或无效值,能否帮助我完成第二步.

Ram*_*ami 34

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

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

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

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

val df2 = df.na.fill("a", Seq("Name"))
            .na.fill("a2", Seq("Place"))
Run Code Online (Sandbox Code Playgroud)

  • 它在 Java 中可用吗?我找不到类似的填充功能。 (3认同)

Dan*_*ter 10

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

因此,如果您已经知道要用N替换Null的值:

String[] colNames = {"Name"}
dataframe = dataframe.na.fill("a", colNames)
Run Code Online (Sandbox Code Playgroud)

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


Sha*_*ala 9

您可以使用DataFrame.na.fill()某个值替换空值以立即更新,您可以这样做

val map = Map("Name" -> "a", "Place" -> "a2")

df.na.fill(map).show()
Run Code Online (Sandbox Code Playgroud)

但是,如果您也想替换坏记录,则需要先验证坏记录。您可以通过使用带有like函数的正则表达式来做到这一点。