我正在寻找一个解决方案,我需要在使用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 |
答案 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
;这是故意的吗?