当列可选时如何从数据框中进行选择

B. *_*ith 5 scala dataframe apache-spark apache-spark-sql

我有一个 Spark(scala)数据框,其中一些数据框列是可选的,也就是说,有时它们不存在。有没有一种非常简单的方法来修改我的df.select语句,以便 Spark 不关心该列可能不存在?

例如,现在我有:df.select(Seq(col("col1"), col("optionalCol"), col("col2")))

我希望会有某种“可选”名称。

Eth*_*han 5

您可以获取您可能关心的列,然后过滤掉数据框中不存在的列。

val dfColumns = df.columns.toSet
val columns: Seq[String] = Seq("col1","optionalcol","col2").filter(dfColumns)
df.select(columns)
Run Code Online (Sandbox Code Playgroud)


nav*_*rri 1

来自Spark 文档

您可以使用以下命令来检查该列是否存在

// returns true if the column exists else returns false
if(df.columns.contains("optional_col")) {
         df.select(Seq(col("col1"), col("optionalCol"), col("col2")))
}    
else {
        df.select(Seq(col("col1"),  col("col2")))
}
Run Code Online (Sandbox Code Playgroud)