运行spark作业从hbase读取数据时发生此错误。谢谢。
这是密码
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result])
hBaseRDD.count()
// transform (ImmutableBytesWritable, Result) tuples into an RDD of Result’s
val resultRDD = hBaseRDD.map(tuple => tuple._2)
resultRDD.count()
// transform into an RDD of (RowKey, ColumnValue)s the RowKey has the time removed
val keyValueRDD = resultRDD.map(result => (Bytes.toString(result.getRow()).split(" ")(0), Bytes.toDouble(result.value)))
keyValueRDD.take(3).foreach(kv => println(kv))
// group by rowkey , get statistics for column value
val keyStatsRDD = keyValueRDD.groupByKey().mapValues(list => StatCounter(list))
keyStatsRDD.take(5).foreach(println)
2条答案
按热度按时间dhxwm5r41#
此错误的一个选项是存储int(4b)并试图将其读入double或long(8b)。
例如
如果是这种情况,据我所知,可能的解决办法是:
在写入正确的类型之前强制转换
读取时,在转换为double/long之前检查值的bytes.length,如果结果为4,则转换为int
omqzjyyz2#
我遇到这个问题最多的时候就是类型错误。请仔细检查您的数据类型。