HiveQL 中的 WrappedArray 到数组
WrappedArray to Array in HiveQL
我正在使用 collect_list
对某些列进行分组,例如:
val res = hiveContext.sql("SELECT date, time, collect_list(id) AS id_list FROM table1 GROUP BY date, time")
id_list
returns 作为 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
?
谢谢!
这里的主要问题是将 Any
显式转换为 WrappedArray[Double]
,您可以这样做:
x(2).asInstanceOf[mutable.WrappedArray[Double]].toArray
在你的情况下。或者您可以使用模式匹配进行类型转换,您可以参考 How to use a Scala match expression instead of isInstanceOf
(to match types) 了解详细信息。
我正在使用 collect_list
对某些列进行分组,例如:
val res = hiveContext.sql("SELECT date, time, collect_list(id) AS id_list FROM table1 GROUP BY date, time")
id_list
returns 作为 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
?
谢谢!
这里的主要问题是将 Any
显式转换为 WrappedArray[Double]
,您可以这样做:
x(2).asInstanceOf[mutable.WrappedArray[Double]].toArray
在你的情况下。或者您可以使用模式匹配进行类型转换,您可以参考 How to use a Scala match expression instead of isInstanceOf
(to match types) 了解详细信息。