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

时间:2017-06-21 09:07:42

标签: java apache-spark

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

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

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

4 个答案:

答案 0 :(得分:26)

您可以使用.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"))

答案 1 :(得分:8)

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

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

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

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

答案 2 :(得分:4)

您可以使用DataFrame.na.fill()将null替换为某个值 您可以立即更新

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

df.na.fill(map).show()

但是如果你想要替换坏记录,那么你需要先验证坏记录。您可以使用带有like函数的正则表达式来完成此操作。

答案 3 :(得分:0)

为了用给定的字符串替换NULL值,我使用了Spark for Java中的fill函数。它接受要替换的单词和一系列列名。以下是我实施的方法: -

List<String> colList = new ArrayList<String>();
colList.add(cols[i]);
Seq<String> colSeq = scala.collection.JavaConverters.asScalaIteratorConverter(colList.iterator()).asScala().toSeq();
data=data.na().fill(word, colSeq);