【问题标题】:Replacing null values with 0 after spark dataframe left outer join火花数据框左外连接后用0替换空值
【发布时间】:2015-10-26 06:10:13
【问题描述】:

我有两个名为 leftright 的数据框。

scala> left.printSchema
root
|-- user_uid: double (nullable = true)
|-- labelVal: double (nullable = true)
|-- probability_score: double (nullable = true)

scala> right.printSchema
root
|-- user_uid: double (nullable = false)
|-- real_labelVal: double (nullable = false)

然后,我加入他们以获取加入的 Dataframe。这是一个左外连接。任何对 natjoin 函数感兴趣的人都可以在这里找到它。

https://gist.github.com/anonymous/f02bd79528ac75f57ae8

scala> val joinedData = natjoin(predictionDataFrame, labeledObservedDataFrame, "left_outer")

scala> joinedData.printSchema
|-- user_uid: double (nullable = true)
|-- labelVal: double (nullable = true)
|-- probability_score: double (nullable = true)
|-- real_labelVal: double (nullable = false)

由于它是左外连接,因此当 user_uid 不存在于右侧时,real_labelVal 列具有空值。

scala> val realLabelVal = joinedData.select("real_labelval").distinct.collect
realLabelVal: Array[org.apache.spark.sql.Row] = Array([0.0], [null])

我想将 realLabelVal 列中的空值替换为 1.0。

目前我执行以下操作:

  1. 我找到 real_labelval 列的索引并使用 spark.sql.Row API 将空值设置为 1.0。 (这给了我一个 RDD[Row])
  2. 然后我应用连接数据帧的架构来获取清理后的数据帧。

代码如下:

 val real_labelval_index = 3
 def replaceNull(row: Row) = {
    val rowArray = row.toSeq.toArray
     rowArray(real_labelval_index) = 1.0
     Row.fromSeq(rowArray)
 }

 val cleanRowRDD = joinedData.map(row => if (row.isNullAt(real_labelval_index)) replaceNull(row) else row)
 val cleanJoined = sqlContext.createDataFrame(cleanRowRdd, joinedData.schema)

有没有优雅或有效的方法来做到这一点?

Goolging 并没有多大帮助。 提前致谢。

【问题讨论】:

  • nat 在 natjoin 中代表什么?
  • @JosiahYoder nat 代表自然连接。

标签: scala join apache-spark spark-dataframe


【解决方案1】:

您是否尝试过使用na

joinedData.na.fill(1.0, Seq("real_labelval"))

【讨论】:

  • 感谢您的快速回复。问题是我们使用cloudera发行版并且集群有spark 1.3.0。我认为在 spark 1.4 中引入了填充功能。我接受这个作为答案。
  • 我需要导入任何东西才能使用na吗?谢谢
  • @GavinNiu 不,na是直接在DataFrame上的方法
  • Seq() 在做什么?
  • fill 接受一个数组 (Seq),因此是包装器。
猜你喜欢
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2022-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-12
  • 1970-01-01
相关资源
最近更新 更多