Spark - array()和Array()

时间:2018-03-21 07:11:31

标签: arrays scala apache-spark

我在Spark Shell(1.6)中将字符串列表转换为如下数组:

val mapData = List("column1", "column2", "column3")
val values = array(mapData.map(col): _*)

值的类型是:

  

值:org.apache.spark.sql.Column = array(column1,column2,column3)

一切都很好,但是当我开始在Eclipse中开发时,我收到了错误:

  找不到

所以我改为:

val values = Array(mapData.map(col): _*)

我遇到的问题是现在价值的类型已经改变了,消耗它的udf不接受这种新类型:

  

values:Array [org.apache.spark.sql.Column] = Array(column1,column2,   栏3)

为什么我无法在我的IDE中使用array(),就像在Shell中一样(我缺少什么导入)?以及为什么数组在没有Array []包装器的情况下生成org.apache.spark.sql.Column

编辑:udf功能:

def replaceFirstMapOfArray = 
udf((p: Seq[Map[String, String]], o: Seq[Map[String, String]]) =>
{
    if((null != o && null !=p)){
        if ( o.size == 1 ) p
        else p ++ o.drop(1)
    }else{
        o
    }
})

1 个答案:

答案 0 :(得分:3)

val mapData = List("column1", "column2", "column3")
val values = array(mapData.map(col): _*)

下面, ArrayList是对象的集合

其中array中的array(mapData.map(col): _*)是一个spark函数,它为相同的数据类型列创建一个带有类型数组的新列。

要使用此功能,您需要导入

import org.apache.spark.sql.functions.array

你可以在这里看到有关数组

的信息
/**    
 * Creates a new array column. The input columns must all have the same data type.  
 * @group normal_funcs    
 * @since 1.4.0   
 */

 @scala.annotation.varargs
 def array(cols: Column*): Column = withExpr { 
   CreateArray(cols.map(_.expr)) 
 }