SparkSQL异常:Failed to check null bit for primitive long value

Wed Dec 30 15:59:34 CST 2015 1699 大数据

文章摘要SparkSQL十分强大,可以利用SparkSQL执行SQL语句,实现结构化查询。

在使用SparkSQL查询之后,会返回一个DataFrame对象,里面存放了Schema和Row。在使用Row对象的get方法时,可能会遇到java.lang.RuntimeException: Failed to check null bit for primitive int value异常


这个异常时由Row抛出来的,原因是你要获取的列为null


override def getInt(i: Int): Int = {
  if (values(i) == null) sys.error("Failed to check null bit for primitive int value.")
  values(i).asInstanceOf[Int]
}

override def getLong(i: Int): Long = {
  if (values(i) == null) sys.error("Failed to check null bit for primitive long value.")
  values(i).asInstanceOf[Long]
}

override def getDouble(i: Int): Double = {
  if (values(i) == null) sys.error("Failed to check null bit for primitive double value.")
  values(i).asInstanceOf[Double]
}

override def getFloat(i: Int): Float = {
  if (values(i) == null) sys.error("Failed to check null bit for primitive float value.")
  values(i).asInstanceOf[Float]
}

override def getBoolean(i: Int): Boolean = {
  if (values(i) == null) sys.error("Failed to check null bit for primitive boolean value.")
  values(i).asInstanceOf[Boolean]
}

override def getShort(i: Int): Short = {
  if (values(i) == null) sys.error("Failed to check null bit for primitive short value.")
  values(i).asInstanceOf[Short]
}

override def getByte(i: Int): Byte = {
  if (values(i) == null) sys.error("Failed to check null bit for primitive byte value.")
  values(i).asInstanceOf[Byte]
}

override def getString(i: Int): String = {
  values(i).asInstanceOf[String]
}

从源码中可以看到,除了getString方法之外,其余都会在null的时候抛出java.lang.RuntimeException: Failed to check null bit for primitive int value异常

打赏
打赏

分享到: