python - 使用 Scala 的 API 替换 DataFrame 的值

标签 python scala apache-spark

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

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

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

在对 Python API 有了一些信心后,我决定在 Scala 上复制它,我注意到 Scala 中有一些奇怪的事情医生。首先,显然 DataFrames 没有方法 replace。其次,经过一些研究,我注意到我必须使用 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 中那样简单地工作,因为我得到了一个错误,我不明白为什么。

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/

相关文章:

python - Matplotlib 文本尺寸

打开 gnome-terminal 并执行多个命令的 Python 语法

scala - Spark Structured Streaming,多个查询未同时运行

Scala:相当于 numpy.where()[0]

scala - 为什么在 Scala Breeze 中对这个 3x2 double 矩阵调用均值是非法的?

apache-spark - 在spark中保存固定大小的parquet输出文件

apache-spark - Spark-Shell 适用于适当的 yarn 资源设置,但不适用于 Spark-Submit

python - 如何从表中检索行并使用 urllib 获取/打开每个链接?

python - 导入错误 : No module named app

scala - 什么是 TypeTag 以及如何使用它?