Python 使用Scala'替换数据帧的值;s API

Python 使用Scala'替换数据帧的值;s API,python,scala,apache-spark,Python,Scala,Apache Spark,我需要替换数据帧的列中的一些值(模式为空和零,我知道这种方法不太准确,但我只是在练习)。我精通apachespark的Python文档,示例往往更具解释性。因此,除了Scala文档之外,我决定先看一下那里,我注意到使用DataFrames中的方法可以实现我所需要的 在本例中,我将col列中的所有2替换为20 df=df.替换(“2”,“20”,subset=“col”) 在对PythonAPI有了一些信心之后,我决定在Scala上复制它,我在Scala文档中发现了一些奇怪的东西。首先,显然,Da

我需要替换
数据帧
中的一些值(模式为空和零,我知道这种方法不太准确,但我只是在练习)。我精通apachespark的
Python
文档,示例往往更具解释性。因此,除了Scala文档之外,我决定先看一下那里,我注意到使用
DataFrames
中的方法可以实现我所需要的

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

df=df.替换(“2”,“20”,subset=“col”)

在对
Python
API有了一些信心之后,我决定在
Scala
上复制它,我在
Scala
文档中发现了一些奇怪的东西。首先,显然,
DataFrames
没有方法
replace
。其次,经过一些研究,我注意到我必须使用的
replace
功能,但这是一个罕见的部分,如果您看到该方法的详细信息,您会注意到它们使用该功能的方式与
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: 
下面是错误:

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))
                                 ^
Name:编译错误
消息::108:错误:重载的方法值替换为替代项:
[T] (cols:Seq[String],替换:scala.collection.immutable.Map[T,T])org.apache.spark.sql.DataFrame
[T] (col:String,替换:scala.collection.immutable.Map[T,T])org.apache.spark.sql.DataFrame
[T] (cols:Array[String],替换:java.util.Map[T,T])org.apache.spark.sql.DataFrame
[T] (col:String,替换:java.util.Map[T,T])org.apache.spark.sql.DataFrame
无法应用于(字符串,scala.collection.mutable.Map[Double,Double])
val dx=df.na.replace(列,映射(0.0->doubleValue))
^

很明显,问题是我从
可变的
包中导入了一些库,所以我只需要执行
.toMap
方法将其转换为
不可变的

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

如果我使用
映射(0.0->doubleValue).toMap
,它就可以工作,但是它没有在文档中公开:|您的第二次尝试应该可以工作,但正如错误所说,您应该使用
不可变的.Map
而不是
可变的.Map
。通常,在使用sparkI.e时,应该避免可变集合。只需从正确的位置导入
Map
scala.collection.immutable
@Odomontois,因此当我使用
Map
时,它会从
mutable
包加载类?您可以阅读关于包的内容。默认情况下,
Map
绑定到
immutable.Map
,如图所示。但我想你在上面的某个地方有一些不需要的东西。
val dx = df.na.replace(column, Map(0.0 -> doubleValue))