python – 使用Scala的API替换DataFrame的值
发布时间:2020-12-20 13:10:11 所属栏目:Python 来源:网络整理
导读:我需要替换DataFrame列中的一些值(模式的空值和零值,我知道这种方法不是很准确,但我只是在练习).我精通Apache Spark的 Python文档,这些例子往往更具说明性.因此,除了Scala文档之外,我决定首先查看一下,我注意到使用DataFrames的 replace方法可以实现我所需要
我需要替换DataFrame列中的一些值(模式的空值和零值,我知道这种方法不是很准确,但我只是在练习).我精通Apache Spark的
Python文档,这些例子往往更具说明性.因此,除了Scala文档之外,我决定首先查看一下,我注意到使用DataFrames的
replace方法可以实现我所需要的功能.
在此示例中,我将列col中的所有2到20替换. df = df.replace(“2”,“20”,subset =“col”) 在对Python API有了一些信心之后,我决定在Scala上复制它,我注意到Scala文档中有些奇怪的东西.首先,显然DataFrames没有替换方法.其次,经过一些研究,我注意到我必须使用DataFrameNaFunctions的替换功能,但这是罕见的部分,如果你看到该方法的细节,你会注意到他们使用这个功能的方式与python实现中的相同(参见图片如下). 在此之后,我尝试在Scala中运行并爆炸,显示下一个错误: Name: Compile Error Message: <console>:108: error: value replace is not a member of org.apache.spark.sql.DataFrame val dx = df.replace(column,Map(0.0 -> doubleValue)) ^ StackTrace: 然后我尝试使用DataFrameNaFunctions来应用替换,但是我不能让它像在python中一样简单,因为我遇到了错误,我不明白为什么. val dx = df.na.replace(column,Map(0.0 -> doubleValue)) 出现错误: Name: Compile Error Message: <console>:108: error: overloaded method value replace with alternatives: [T](cols: Seq[String],replacement: scala.collection.immutable.Map[T,T])org.apache.spark.sql.DataFrame <and> [T](col: String,T])org.apache.spark.sql.DataFrame <and> [T](cols: Array[String],replacement: java.util.Map[T,T])org.apache.spark.sql.DataFrame cannot be applied to (String,scala.collection.mutable.Map[Double,Double]) val dx = df.na.replace(column,Map(0.0 -> doubleValue)) ^ 解决方法
显然问题是我从可变包中导入了一些库,所以我只需要执行方法.toMap将其转换为不可变的.
val dx = df.na.replace(column,Map(0.0 -> doubleValue)) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |