如何将Spark DataFrame返回的Any类型转为WrappedArray或普通数组?
解决Spark WrappedArray转普通数组的问题
嘿,这个问题我之前也碰到过,其实很容易搞定!咱们一步步来:
首先,你的Any类型变量实际是Spark的WrappedArray[Int](属于org.apache.spark.sql.catalyst.util包),咱们先把它安全转成WrappedArray[Int]类型,再转成普通数组或者直接遍历。
1. 把Any类型转为WrappedArray[Int]
推荐用模式匹配来做类型转换,比直接强转更安全,能避免类型不匹配的异常:
// 假设你的Any变量叫anyValue val anyValue: Any = WrappedArray(101, 11, 119, 141, 238, 64, 45, 268, 31, 63, 86, 23, 24, 420, ...) val wrappedArray = anyValue match { case wa: WrappedArray[Int] => wa case _ => throw new IllegalArgumentException("输入不是WrappedArray[Int]类型哦") }
如果你百分百确定这个Any变量就是WrappedArray[Int],也可以直接强转(但不推荐,风险较高):
val wrappedArray = anyValue.asInstanceOf[WrappedArray[Int]]
2. 转成普通数组或直接遍历
其实WrappedArray本身就支持Scala集合的遍历操作,你可以直接用foreach、map这些方法:
// 直接遍历输出每个整数 wrappedArray.foreach(num => println(s"当前数字:$num")) // 转成普通Scala Array[Int] val normalIntArray: Array[Int] = wrappedArray.array // 转成Java数组(如果需要的话) val javaIntArray: Array[Int] = wrappedArray.toArray
这样你就能轻松处理这些整数啦!
内容的提问来源于stack exchange,提问作者johnnydonna
相关产品推荐
相关产品推荐

