gpt4 book ai didi

scala - 带有列Scala的Spark Select

转载 作者:行者123 更新时间:2023-12-04 13:18:37 24 4
gpt4 key购买 nike

我试图找到一种使用List [Column进行 Spark 选择的好方法,我分解一个列,而不是用分解的列传回我感兴趣的所有列。

var columns = getColumns(x) // Returns a List[Column]
tempDf.select(columns) //trying to get

我知道尝试找到一种好的方法,如果是字符串,我可以做类似的事情
val result = dataframe.select(columnNames.head, columnNames.tail: _*)

最佳答案

对于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(_)) : _*)

您可以看到spark在内部如何将 head & tail 转换为列列表,以再次调用 Select

因此,在这种情况下,如果您想要一个清晰的代码,我将建议:

如果是 列:List [String] :
import org.apache.spark.sql.functions.col
df.select(columns.map(col): _*)

否则,如果是 列:List [Columns] :
df.select(columns: _*)

关于scala - 带有列Scala的Spark Select,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39909863/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com