我需要替换 DataFrame
的 Column
中的一些值(模式的 null 和 zeros,我知道这种方法不是很准确,但我只是练习)。我精通 Apache Spark 的 Python
文档,并且这些示例往往更具解释性。因此,除了 Scala 文档外,我决定先看看那里,我注意到使用 replace 可以实现我需要的东西。来自 DataFrames
的方法。
在此示例中,我将 col
列中的所有 2
替换为 20
。
df = df.replace("2", "20", subset="col")
在对 Python
API 有了一些信心后,我决定在 Scala
上复制它,我注意到 Scala
中有一些奇怪的事情医生。首先,显然 DataFrames
没有方法 replace
。其次,经过一些研究,我注意到我必须使用 DataFrameNaFunctions 的 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:
然后我尝试使用 DataFrameNaFunctions
应用 replace
,但我无法让它像在 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, 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))
^
最佳答案
显然问题是我从 mutable
包中导入了一些库,所以我只需要执行方法 .toMap
将其转换为 immutable
.
val dx = df.na.replace(column, Map(0.0 -> doubleValue))
关于python - 使用 Scala 的 API 替换 DataFrame 的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35513308/