udf 火花列名称
udf spark column names
我需要指定一系列列。如果我传递两个字符串,它工作正常
val cols = array("predicted1", "predicted2")
但是如果我传递一个序列或数组,我会得到一个错误:
val cols = array(Seq("predicted1", "predicted2"))
你能帮帮我吗?非常感谢!
函数签名是def array(colName: String, colNames: String*): Column
,这意味着它需要一个字符串,然后是一个或多个字符串。如果你想使用一个序列,这样做:
array("predicted1", Seq("predicted2"):_*)
据我所知in the code,此函数有几个重载版本,但没有一个直接采用 Seq
。因此,按照描述将其转换为可变参数应该是正确的方法。
您至少有两个选择:
使用 Seq[String]
:
val columns: Seq[String] = Seq("predicted1", "predicted2")
array(columns.head, columns.tail: _*)
使用 Seq[ColumnName]
:
val columns: Seq[ColumnName] = Seq($"predicted1", $"predicted2")
array(columns: _*)
您可以使用 Spark 的数组形式 def array(cols: Column*): Column
,其中 cols
val 被定义 而 使用 $
列名称符号 - 即当您想要特定的 Seq[ColumnName]
类型,但使用字符串创建时。这是解决该问题的方法...
import org.apache.spark.sql.ColumnName
import sqlContext.implicits._
import org.apache.spark.sql.functions._
val some_states: Seq[String] = Seq("state_AK","state_AL","state_AR","state_AZ")
val some_state_cols: Seq[ColumnName] = some_states.map(s => symbolToColumn(scala.Symbol(s)))
val some_array = array(some_state_cols: _*)
...使用 Spark 的 symbolToColumn
方法。
或直接使用 ColumnName(s)
构造函数。
val some_array: Seq[ColumnName] = some_states.map(s => new ColumnName(s))
我需要指定一系列列。如果我传递两个字符串,它工作正常
val cols = array("predicted1", "predicted2")
但是如果我传递一个序列或数组,我会得到一个错误:
val cols = array(Seq("predicted1", "predicted2"))
你能帮帮我吗?非常感谢!
函数签名是def array(colName: String, colNames: String*): Column
,这意味着它需要一个字符串,然后是一个或多个字符串。如果你想使用一个序列,这样做:
array("predicted1", Seq("predicted2"):_*)
据我所知in the code,此函数有几个重载版本,但没有一个直接采用 Seq
。因此,按照描述将其转换为可变参数应该是正确的方法。
您至少有两个选择:
使用
Seq[String]
:val columns: Seq[String] = Seq("predicted1", "predicted2") array(columns.head, columns.tail: _*)
使用
Seq[ColumnName]
:val columns: Seq[ColumnName] = Seq($"predicted1", $"predicted2") array(columns: _*)
您可以使用 Spark 的数组形式 def array(cols: Column*): Column
,其中 cols
val 被定义 而 使用 $
列名称符号 - 即当您想要特定的 Seq[ColumnName]
类型,但使用字符串创建时。这是解决该问题的方法...
import org.apache.spark.sql.ColumnName
import sqlContext.implicits._
import org.apache.spark.sql.functions._
val some_states: Seq[String] = Seq("state_AK","state_AL","state_AR","state_AZ")
val some_state_cols: Seq[ColumnName] = some_states.map(s => symbolToColumn(scala.Symbol(s)))
val some_array = array(some_state_cols: _*)
...使用 Spark 的 symbolToColumn
方法。
或直接使用 ColumnName(s)
构造函数。
val some_array: Seq[ColumnName] = some_states.map(s => new ColumnName(s))