Arrays Spark—array()和array()之间的差异
我在Spark Shell(1.6)中将字符串列表转换为如下数组:Arrays Spark—array()和array()之间的差异,arrays,scala,apache-spark,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
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不接受这种新类型:
值:Array[org.apache.spark.sql.Column]=Array(column1,column2,
第3栏)
为什么我不能像在Shell中一样在IDE中使用array()(我缺少什么导入)?为什么数组在没有数组[]包装器的情况下生成一个org.apache.spark.sql.Column
编辑:自定义项功能:
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
}
})
这里,,
Array
或List
是对象的集合
其中,array(mapData.map(col):\u*)
中的asarray
是一个spark函数,它为相同的数据类型列创建一个类型为array的新列
要使用它,您需要导入
import org.apache.spark.sql.functions.array
您可以在这里看到有关阵列的信息
这里,,
Array
或List
是对象的集合
其中,array(mapData.map(col):\u*)
中的asarray
是一个spark函数,它为相同的数据类型列创建一个类型为array的新列
要使用它,您需要导入
import org.apache.spark.sql.functions.array
您可以在这里看到有关阵列的信息
您的udf函数在哪里?是的,让我添加ita udf函数需要传递一个列参数和一个基本数组中的值。这就是错误发生的原因。Shankar下面的回答应该回答了你的困惑是的。感谢Ramesh的评论,udf函数在哪里?是的,让我添加一个ita udf函数需要传递一个列参数和一个基本数组中的值。这就是错误发生的原因。Shankar下面的回答应该回答了你的困惑是的。谢谢Ramesh的评论谢谢。那么,我怎样才能修改我的代码,使Eclipse不会抱怨呢?您导入了
import org.apache.spark.sql.functions.array了吗。谢谢,谢谢。那么,我怎样才能修改我的代码,使Eclipse不会抱怨呢?您导入了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))
}