首页 > 解决方案 > 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 运行时,它返回一个空数据帧。知道为什么吗?我究竟做错了什么?

标签: apache-sparkapache-spark-sql

解决方案


好吧,我想我找到了原因。它与查询无关。尝试在 Hive 中使用 csv 文件创建表时,这似乎是一个问题。

当您选择源 - HDFS 中 csv 文件的路径,然后在格式下 - 选中“有标题”复选框。

似乎可以创建表。

然后,当我在 Hive 或 Impala 中执行以下操作时:

Select max(date) from xTable

我得到了最大日期(日期列是字符串)

但是,当我尝试通过 Spark SQL 运行相同的程序时:

我得到的结果为 date (与列标题相同的名称)。

如果我从 CSV 文件中删除标题并将其导入,然后他们手动创建标题和类型,那么我就不会遇到这个问题。

似乎是某种形式的错误,或者可能是我的用户错误。


推荐阅读