neu*_*roh 5 scala apache-spark
我正在尝试找到一个使用List [Column进行spark选择的好方法,我正在爆炸一个列,而不是使用我的爆炸列传回我感兴趣的所有列.
var columns = getColumns(x) // Returns a List[Column]
tempDf.select(columns) //trying to get
Run Code Online (Sandbox Code Playgroud)
试着找到一个好方法,我知道,如果它是一个字符串,我可以做类似的事情
val result = dataframe.select(columnNames.head, columnNames.tail: _*)
Run Code Online (Sandbox Code Playgroud)
Fra*_*nzi 15
对于spark 2.0来说,你有两种选择.两者都取决于您管理列(字符串或列)的方式.
Spark代码(spark-sql_2.11/org/apache/spark/sql/Dataset.scala):
def select(cols: Column*): DataFrame = withPlan {
Project(cols.map(_.named), logicalPlan)
}
def select(col: String, cols: String*): DataFrame = select((col +: cols).map(Column(_)) : _*)
Run Code Online (Sandbox Code Playgroud)
您可以看到内部spark如何将您转换head & tail为要再次调用的列列表Select.
那么,在这种情况下,如果你想要一个清晰的代码,我会建议:
如果列:List [String]:
import org.apache.spark.sql.functions.col
df.select(columns.map(col): _*)
Run Code Online (Sandbox Code Playgroud)
否则,如果列:列表[列]:
df.select(columns: _*)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10791 次 |
| 最近记录: |