我有兩個數據框,一個包含以下格式(eventData)的事件詳細信息。加入包含時間範圍的火花數據幀的時間序列數據框
|id|parameter |value|eventtime |
+++++++++++++++++++++++++++++++++++++++++++
|1 |temperature|23 |2005-Apr-11 11:20:00|
|2 |temperature|21 |2005-Apr-12 14:34:00|
,另一種是包含一個時間範圍
Operationdata
|operationid|paramter |start_time |end_time |
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
|1234 |Temperature|2005-Apr-11 10:20:00|2005-Apr-11 12:20:00|
|1235 |Temperature|2005-Apr-12 14:00:00|2005-Apr-11 16:30:00|
現在,我想加入這兩個dataframes下面的輸出獲取。
|operationid|paramter |value|eventtime |
++++++++++++++++++++++++++++++++++++++++++++++++++++
|1234 |Temperature|23 |2005-Apr-11 11:20:00|
|1235 |Temperature|21 |2005-Apr-12 14:34:00|
我可以做到這一點使用下面的SQL查詢
joinSQL = sqlContext.sql("select OperationDF.operationid,eventDF.parameter,eventDF.value,eventDF.eventtime from eventDF,OperationDF where eventDF.eventtime >= jdbcDF.start_time AND eventDF.eventtime <= jdbcDF.end_time")
此查詢在我想要的方式返回數據,但它確實在兩個dataframes之間的笛卡兒積。
OperationDF實際上是從RDBMS中獲取的,我必須在OperationDF上執行SQLContext.cacheTable以避免多個查詢到數據庫。
我是新手引發和我的查詢現在是
有沒有更好的方式做加入,避免笛卡兒積
不SQLContext.cacheTable保持駕駛員記憶數據幀的內容還是將分佈在一個集羣?
- 如果將它保存在驅動程序內存中,我們如何處理Dataframe太大而無法保存在驅動程序內存中的情況。
謝謝。