使用spark

时间:2016-10-27 18:49:21

标签: scala hadoop apache-spark spark-dataframe

我正在寻找一个解决方案,我需要在使用Spark的数值字段中填充null。我写的代码如下:

val myDF = sqlContext.sql("from mystg.my_acct_table select id,amt,tot_amt where id=12345")
myDF.map(row => {val row1 = row.getAs[Double]("tot_amt")
      val my_tot_amt = {
          if(row1.isNaN())
              null.asInstanceOf[Double]
          else
              Math.abs(row1.toDouble)
        }
    Row(row(0),row(1),my_tot_amt)
   })

我也尝试将上述逻辑放在Row(第(0)行,第(1)行,my_tot_amt)中。

  Row(row(0),row(1),(if(row1.isNaN())
                    null.asInstanceOf[Double]
                else
                    Math.abs(row1.toDouble)))

但是我得到了输出      | 8687992537618075 | 1163.35 | 0.0 |

预期的产出是      | 8687992537618075 | 1163.35 | null |

1 个答案:

答案 0 :(得分:1)

null.asInstanceOf[Double]0.0。只是不要施展它:

val my_tot_amt = if(row1.isNaN())
  null
else
  Math.abs(row1.toDouble)

应该有用(这会使my_tot_amt Any; val my_tot_amt: java.lang.Double = ...的类型更精确,但在这种特定情况下不应该是必需的)。

另外,我认为0.0已经row("tot_amt")已经null;这是故意的吗?