使用spark在配置单元表中的数值数据类型中将null设置为值

sdnqo3pr  于 2021-05-27  发布在  Spark
关注(0)|答案(1)|浏览(412)

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

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)
   })

我还尝试将上述逻辑放在第行(第(0)行、第(1)行、我的总金额)。

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

但我得到的输出是| 1163.35 | 0.0|
预期输出为| 8687992537618075 | 1163.35 | null|

sshcrbum

sshcrbum1#

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 ; 这是故意的吗?

相关问题