在 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
您好,我正在尝试将 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