2017-01-16 51 views
0

我有一張hbase數據庫,裏面有10億條記錄。我想根據一定的條件(按日期)過濾記錄。過濾條件如何在火花數據框中工作?

例如:

Dataframe.filter(col(date) === todayDate) 

篩選後會從表中的所有記錄都將被加載到內存或應用我會得到過濾記錄?

+1

一方面,假設它取決於您使用的數據源。有時數據源不支持所有下推式謂詞。另一方面,你的問題是非常廣泛的回答考慮所有的火花可以連接到的數據源,例如mongo,elasticsearch,hbase,cassandra,csv等。 – eliasah

+0

我想通過使用spark hbase連接器https ://github.com/hortonworks-spark/shc –

回答

0

如果你的用例只是從存儲中讀取,過濾並保存在某個地方,如果你有一些方法直接讀取數據到RDD(記錄的延遲加載),那麼過濾器將流水線讀取和寫入。這意味着過濾器操作不會等待讀取整個數據[簡而言之,該過濾器是一種變換而不是動作]。如果您在過濾器之前有任何操作,則只有在從商店讀取完整數據後纔會應用過濾器。

+1

'如果在過濾器之前有任何操作,那麼只有在從存儲中讀取完整數據後纔會應用過濾器.'操作正在返回值,而不是RDD,因此您無法'過濾器的結果的行動;) –

+0

像@T.Gawęda指出,你的答案是不準確的,加上它並沒有真正回答OP的問題。 – eliasah

+0

@T.Gawęda我同意,但由於問題是*過濾器將應用在所有記錄從表中將被加載到內存或我會得到過濾記錄?*,該聲明強調的情況下,可能會讀取整個數據。根據返回值的RDD,我同意這一點。但考慮到一個人調用rdd.count()然後rdd.filter(...)的情況,我的帖子回答了問題。 – code

相關問題