sql - 仅当字段存在时才选择字段(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 |
解决方案
您可以在列表中列出所有列,无论是硬编码还是从其他元数据准备并使用 intersect
val columnNames = Seq("c1","c2","c3","c4")
df.select( df.columns.intersect(columnNames).map(x=>col(x)): _* ).show()
推荐阅读
- makefile - 如何欺骗 Make 在子文件夹中动态运行命令
- azure-devops - 从 repo 构建特定的解决方案文件
- swift - 如何修复显示屏上的按钮
- python - Google OR-TOOLS VRP 以前的 OR-TOOLS 分配问题的问题
- postman - 如何在 Postman 中使用 pm.expect 断言来显示差异
- c++ - 使用 VSCode MACOS 构建时 GLFW 链接器命令失败(退出代码 1)
- reactjs - 如何记忆自定义钩子以提高性能
- javascript - 使用多个功能交换案例
- reactjs - React/Jest/Enzyme:在没有 Mocking 的情况下测试 useLocation Hook
- python - 使用 bbox_inches = 'tight' 时的 Matplotlib 缓冲区问题