我正在尝试提高使用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值或无效值,能否帮助我完成第二步。
答案 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);