我正在寻找一种解决方案,我需要使用 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(row(0),row(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.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
;这是故意的吗?
关于scala - 使用 spark 将 null 设置为 Hive 表中数字数据类型的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40292070/