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

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

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

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

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

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

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

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

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

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

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

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

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

您可以使用DataFrame.na.fill()将null替换为某个值。要立即更新,您可以执行此操作

 val map = Map("Name" -> "a", "Place" -> "a2") df.na.fill(map).show() 

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

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

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