apache-spark - Spark SQL 查询问题 - 带有子查询的 SQL 似乎无法检索记录
问题描述
我有一个 Spark SQL 查询,例如:
Select * from xTable a Where Exist (filter subquery) AND (a.date IN (Select max(b.date) from xTable b))
在某些情况下(当没有提供过滤表时),我filter subquery
应该简单地做一个Select 1
.
每当我在 Impala 中运行它时,它都会返回记录,在 Hive 中它抱怨只允许 1 个子查询表达式。但是,当我在 Spark 2.4 中将它作为 Spark SQL 运行时,它返回一个空数据帧。知道为什么吗?我究竟做错了什么?
解决方案
好吧,我想我找到了原因。它与查询无关。尝试在 Hive 中使用 csv 文件创建表时,这似乎是一个问题。
当您选择源 - HDFS 中 csv 文件的路径,然后在格式下 - 选中“有标题”复选框。
似乎可以创建表。
然后,当我在 Hive 或 Impala 中执行以下操作时:
Select max(date) from xTable
我得到了最大日期(日期列是字符串)
但是,当我尝试通过 Spark SQL 运行相同的程序时:
我得到的结果为 date
(与列标题相同的名称)。
如果我从 CSV 文件中删除标题并将其导入,然后他们手动创建标题和类型,那么我就不会遇到这个问题。
似乎是某种形式的错误,或者可能是我的用户错误。
推荐阅读
- c# - Session.clear 会话放弃不起作用
- odoo - 如何在 ubuntu 14.04 中安装 odoo?开发 odoo 模块(如 html、css 等)的基本要求是什么
- android - 如何确保 .gitignore 适用于同一存储库中的多个 Android 项目
- java - 以编程方式设置按钮的布局(计算器)
- javascript - 如何使用 javascript 将过滤器应用于嵌套数组中的所有对象
- ionic4 - 在ionic4中的单个页面中实现选项卡和菜单
- excel - 如何在 VBA 中为单元格公式使用多个变量
- android-studio-3.4 - 我正在尝试构建此应用程序,但出现一个错误。它看起来像 gradle 设置错误。所以我从应用程序中提供了 gradle 设置
- javascript - 如何使用ajax将画布数据从javascript发送到django
- react-native - 将 flatlist 的值保存在 asyncstorage 中