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))