在HiveQL中将WrappedArray转换为数组

时间:2016-08-11 22:14:46

标签: arrays scala apache-spark apache-spark-sql hiveql

我正在使用collect_list对某些列进行分组,如:

val res = hiveContext.sql("SELECT date, time, collect_list(id) AS id_list FROM table1 GROUP BY date, time")

id_list返回WrappedArray

WrappedArray(1,2,1,2)
WrappedArray(4,3,4)
WrappedArray(6,7,6,7,6)

但是我将id_list传递给以myFunc作为输入的Array[Double]

def myFunc(xs: Array[Double]) {...}

我的问题是如何正确调用myFunc来解析id_list。我有类似的东西:

res.collect.foreach(x => myFunc(x(2)))

但它给了我一个type mismatch; found : Any required: Array[Double]错误。

WrappedArray隐式转换为Array的正确方法是什么,或者如何以优化的方式调用myFunc

谢谢!

1 个答案:

答案 0 :(得分:1)

此处的主要问题是明确将Any转换为WrappedArray[Double],您可以这样做:

x(2).asInstanceOf[mutable.WrappedArray[Double]].toArray

在你的情况下。或者您可以使用模式匹配进行类型转换,您可以参考How to use a Scala match expression instead of isInstanceOf (to match types)了解详细信息。