如何使用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坏记录。 您可以使用具有like
function的正则表达式来完成此操作。
为了用给定的字符串替换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);
- 在google dataproc集群实例中的spark-submit上运行app jar文件
- 如何在IntelliJ IDE中集成Spark和Scala项目?
- 在Spark Web UI中看不到完成的作业
- 如果在SparkAction中使用PySpark,Oozie作业将无法运行
- 如何在Java Spark RDD上执行标准偏差和平均操作?
- 如何在Spark RDD(Java)中通过索引获取元素
- 为什么Spark在本地模式下失败并且“无法获得broadcast_0的broadcast_0_piece0”?
- 如何通过Sparklyr在本地模式下运行Spark时配置驱动程序内存?
- 在Apache spark中,使用mapPartitions和组合使用广播变量和map之间的区别是什么