使用Scala的API替换数据帧的值

2024-04-23 17:03:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要替换DataFrameColumn中的一些值(对于模式,我知道这种方法不是很准确,但我只是在练习)。我精通apachespark的Python文档,并且示例往往更具解释性。因此,除了Scala文档之外,我决定先看看那里,我注意到使用DataFrames中的replace方法可以实现我需要的功能。在

在本例中,我将列col中的所有2替换为20。在

df = df.replace("2", "20", subset="col")

在对PythonAPI有了一些信心之后,我决定在Scala上复制这个,我注意到Scala文档中有一些奇怪的东西。首先,显然DataFrames没有{}的方法。其次,经过一些研究后,我注意到我必须使用DataFrameNaFunctionsreplace功能,但这是很少见的部分,如果您看到该方法的细节,您会注意到他们使用此功能的方式与python实现相同(见下图)。在

replace documentation

在这之后,我试图在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来应用replace,但我不能使它像python中那样简单,因为我遇到了一个错误,我不明白为什么。在

^{pr2}$

错误来了:

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, replacement: scala.collection.immutable.Map[T,T])org.apache.spark.sql.DataFrame <and>
  [T](cols: Array[String], replacement: java.util.Map[T,T])org.apache.spark.sql.DataFrame <and>
  [T](col: 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))
                                 ^

Tags: 方法文档org功能mapdataframedfsql
1条回答
网友
1楼 · 发布于 2024-04-23 17:03:20

显然问题是我从mutable包中导入了一些库,所以我只需要执行方法.toMap将其转换为immutable。在

val dx = df.na.replace(column, Map(0.0 -> doubleValue))

相关问题 更多 >