我需要替換DataFrame
(模式中的零和零)的Column
中的一些值,我知道這種方法不是很準確,但我只是在練習。我精通Apache Spark的Python
文檔,這些示例往往更具說明性。因此,除了Scala文檔之外,我決定首先看看那裏,並且我注意到使用DataFrames
的replace方法可以實現我需要的功能。使用Scala API替換DataFrame的值
在這個例子中,我將2
全部替換爲20
列col
。
df = df.replace("2", "20", subset="col")
獲得一些信心與Python
API後,我決定複製這種對Scala
,我在Scala
DOC注意到一些奇怪的事情。首先,顯然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))
^
它工作,如果我做'地圖(0.0 - > doubleValue).toMap',但它沒有在文檔中公開。 :| –
你的第二次嘗試應該工作,但正如錯誤說你應該使用'immutable.Map'而不是'mutable.Map'。 通常,在使用spark – Odomontois
I.e.時應避免可變集合。只需從正確的位置導入'Map':'scala.collection.immutable' – Odomontois