带有 HiveContext 的 Apache Spark 查询不起作用

Apache Spark Query with HiveContext doesn't work

我使用 Spark 1.6.1。在我的 Spark Java 程序中,我连接到 Postgres 数据库并通过 JDBC 将每个 table 注册为临时 table。例如:

Map<String, String> optionsTable = new HashMap<String, String>();
optionsTable.put("url", "jdbc:postgresql://localhost/database?user=postgres&password=passwd");
optionsTable.put("dbtable", "table");
optionsTable.put("driver", "org.postgresql.Driver");
DataFrame table = sqlContext.read().format("jdbc").options(optionsTable).load();        
table.registerTempTable("table");

这没有问题:

hiveContext.sql("select * from table").show();

这也有效:

DataFrame tmp = hiveContext.sql("select * from table where value=key");
tmp.registerTempTable("table");

然后我可以看到 table 的内容:

hiveContext.sql("select * from table").show();

但现在我遇到了一个问题。当我执行这个时:

hiveContext.sql("SELECT distinct id, timestamp FROM measure, measure_range w WHERE tble.timestamp >= w.left and tble.timestamp <= w.right").show();

Spark 什么都不做,但在 Postgres 上的原始数据库中它工作得很好。所以我决定稍微修改一下查询:

hiveContext.sql("SELECT id, timestamp FROM measure, measure_range w WHERE tble.timestamp >= w.left").show();

此查询正在运行并为我提供了结果。但是另一个查询不起作用。区别在哪里?为什么第一个查询不起作用,但第二个查询运行良好?

而且数据库不是很大。用于测试,它的大小为 4 MB。

由于您正在尝试 select 一个不同的 ID,因此您需要 select 时间戳作为聚合函数的一部分,然后按 ID 分组。否则,它不知道将哪个时间戳与 ID 配对。