在 Spark 中将 BigInt 转换为 Int

Casting BigInt to Int in Spark

您好,我正在尝试将 BigInt 转换为 int,以便生成 Rating 类。 我只想使用足够小以适合 in 的实例我使用以下代码:

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 计数在 Zepplin 中传递以下异常:

java.lang.ClassCastException: java.lang.Long cannot be cast to scala.math.BigInt

转换就像更改 "the glasses" 你的代码用来表示你的值所引用的内容,而不是实际更改引用的内容,也不更改引用以指向新的 BigInt 实例。

这意味着您需要使用它真正拥有的类型来获取您的值,然后从中构建一个 BigInt 实例:

BigInt(row.getAs[Long](0))

按照相同的推理,您可以从 Long 创建一个 Int 实例,如下所示:

row.getAs[Long](0).toInt

但可能会溢出整型表示范围

我注意到 .toInt 我经常发生溢出 所以我尝试将余数和商相加。

((rec.getLong(0) % Int.MaxValue) + (rec.getLong(0) / Int.MaxValue)).toInt

这更好,因为我得到了 232 个唯一值而不是 234,但是使用 toInt 我得到了 6 个唯一值而不是 234。

当我使用 below 进行 cast 时,number 的值会发生变化!

table.col("id").cast("long") //java