首页 > 解决方案 > 仅当字段存在时才选择字段(SQL 或 Scala)

问题描述

输入数据框可能并不总是包含所有列。在 SQL 或 SCALA 中,我想创建一个 select 语句,即使数据框没有列,它也不会出错,它只会输出确实存在的列。

例如,此语句将起作用。

Select store, prod, distance from table

+-----+------+--------+
|store|prod  |distance|
+-----+------+--------+
|51   |42    |2     |
|51   |42    |5     |
|89   |44    |9     |

如果数据框如下所示,我希望相同的语句起作用,忽略不存在的内容,并输出现有列(在本例中为“存储”和“产品”)

+-----+------+
|store|prod  |
+-----+------+
|51   |42    |
|51   |42    |
|89   |44    |

标签: sqlscalaapache-sparkdataframeapache-spark-sql

解决方案


您可以在列表中列出所有列,无论是硬编码还是从其他元数据准备并使用 intersect

val columnNames = Seq("c1","c2","c3","c4")

df.select( df.columns.intersect(columnNames).map(x=>col(x)): _* ).show()

推荐阅读