嗨,我正在尝试投射BigInt
to和int
in命令生成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()
在Zeppelin中,fs计数提供以下异常:
java.lang.ClassCastException: java.lang.Long cannot be cast to scala.math.BigInt
转换就像更改代码所用的“眼镜”来表示您的值引用的内容,而不是实际更改引用的内容,也不更改引用指向新的BigInt
实例。
这意味着你需要使用它真正具有的类型来获取你的值,然后从中构建一个BigInt
实例:
BigInt(row.getAs[Long](0))
按照相同的推理,您可以从Int
创建一个Long
实例,如下所示:
row.getAs[Long](0).toInt
但它可能溢出整数类型表示范围。
我注意到.toInt
经常发生溢出,所以我尝试添加余数和商。
((rec.getLong(0) % Int.MaxValue) + (rec.getLong(0) / Int.MaxValue)).toInt
这更好,因为我获得了232个独特的值代替234但是有了toInt我获得了6个独特的值而不是234个。
当我使用下面的演员时,数字的值将被改变!
table.col("id").cast("long") //java