Spark 2.2:
在SPARK-19254中添加了对Seq,Map和Tuple(struct)文字的支持.根据to tests:
import org.apache.spark.sql.functions.typedLit
typedLit(Seq("foo", "bar"))
火花< 2.2 只需使用lit映射并使用数组包装:
def asLitArray[T](xs: Seq[T]) = array(xs map lit: _*)
df.withColumn("an_array", asLitArray(colString)).show
// +---+---+----------+
// |foo|bar| an_array|
// +---+---+----------+
// | 1| 1|[foo, bar]|
// | 2| 2|[foo, bar]|
// | 3| 3|[foo, bar]|
// +---+---+----------+
关于从Seq [String]到Array类型的列的转换,此功能已由以下提供:
def array(colName: String, colNames: String*): Column
要么
def array(cols: Column*): Column
例:
val cols = Seq("bar", "foo")
cols match { case x::xs => df.select(array(x, xs:_*))
// or
df.select(array(cols map col: _*))
当然,所有列都必须属于同一类型.