Scala 在Spark中将BigInt转换为Int
嗨,我正在尝试将Scala 在Spark中将BigInt转换为Int,scala,apache-spark,apache-spark-mllib,apache-zeppelin,Scala,Apache Spark,Apache Spark Mllib,Apache Zeppelin,嗨,我正在尝试将BigInt转换为int,以便生成类。 我只想使用足够小的实例,以适应我使用的以下代码: 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计数在Zep
BigInt
转换为int
,以便生成类。
我只想使用足够小的实例,以适应我使用的以下代码:
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不能强制转换为scala.math.BigInt
强制转换就像更改代码用来表示值引用的内容的“眼镜”,而不是实际更改引用的内容,也不是更改引用以指向新的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。当我使用下面的方法进行转换时,number的值将被更改
table.col("id").cast("long") //java
抱歉,我需要一个Int。所以链是BigInt=>Int