您好我正在尝试将BigInt
投射到int
以生成Rating课程。
我只想使用足够小的实例来使用以下代码:
val tup=rs.select("kunden_nr","product_list")
val rdd=tup.rdd.map(row=>(row.getAs[BigInt](0),row.getAs[Seq[Int]](1)))
val fs=rdd.filter(el=>el._1.isValidInt)
fs.count()
rdd.count()
fs count在Zepplin中提供以下异常:
java.lang.ClassCastException: java.lang.Long cannot be cast to scala.math.BigInt
答案 0 :(得分:3)
铸造就像改变眼镜"您的代码用于表示您的值引用的内容,而不是实际更改引用的内容,也不会将引用更改为指向新的BigInt
实例。
这意味着你需要使用它真正具有的类型来获取你的值,然后从中构建一个BigInt
实例:
BigInt(row.getAs[Long](0))
遵循相同的推理,您可以从Int
创建Long
个实例,如下所示:
row.getAs[Long](0).toInt
但它可能溢出整数类型表示范围。
答案 1 :(得分:0)
我注意到.toInt
经常发生溢出事件
所以我尝试添加余数和商。
((rec.getLong(0) % Int.MaxValue) + (rec.getLong(0) / Int.MaxValue)).toInt
这更好,因为我获得了232个独特的值代替234但是有了toInt我获得了6个独特的值而不是234个。
答案 2 :(得分:0)
当我使用以下内容进行投射时,数字的值将会改变!
{{1}}