3
我使用Spark 1.6.1。在我的Spark Java程序中,我連接到Postgres數據庫,並通過JDBC將每個表註冊爲臨時表。例如:使用HiveContext的Apache Spark查詢不起作用
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");
,然後我可以看到表的內容有:
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的大小。
感謝您的幫助!當我刪除獨特的查詢正在工作。但是我不知道如何解決您的解決方案中的問題。你能幫助我嗎? –
那麼你必須決定你對使用ID有興趣獲得哪些相應的時間戳。例如,如果你想要最新的,它將是'從測量中選擇id,max(timestamp),measure_range w WHERE tble.timestamp> = w.left group by ID' –
我忘了查詢中的tble。不工作的查詢是:SELECT distinct id,timestamp FROM measure tble,measure_range w WHERE tble.timestamp> = w.left and tble.timestamp <= w.right。當我執行然後:選擇ID,最大(時間戳)從措施tble,measure_range w WHERE tble.timestamp> = w.left和tble.timestamp <= w.right組由wid。 Spark也無所作爲。在網絡用戶界面上它表示一項工作正在運行,但沒有任何事情會發生。 –