2016-11-02 47 views
0

問題:
大量文件。每個文件都是10MB,包含json格式的記錄,gzip。在Spark中通過S3文件進行迭代

我的代碼片段將所有的數據加載到內存中。沒有必要這樣做。我一次只需要在內存中存儲幾小時的數據。我需要一個滑動窗口。

是否有可能將火花流應用到文件的'窗口'的想法,我將如何做到這一點?

我使用python

location = "s3://bucketname/xxxx/2016/10/1[1-2]/*/file_prefix*.gz" 
rdd = sc.textFile(location) 
+0

如果您知道需要加載哪些數據,則可以使用'filter',因爲spark中的所有轉換都是惰性的,它只加載過濾的數據。 – Shankar

+0

好吧,這真的很有幫助。儘管如此,我仍然認爲我最終還是會需要應用某種窗口。我有很多數據。它大約是300GB gzipped。 – hibernado

+0

Spark流支持滑動窗口功能,請查看http://spark.apache.org/docs/latest/streaming-programming-guide.html#window-operations – Shankar

回答

0

你實際發佈的片段確實沒有計算。 Spark的執行是懶惰的,當你要求一個結果時 - 例如計算RDD時,Spark只會強制計算「變換」,如maps,filters,甚至textFiles。

另外需要注意的是,大部分Spark操作默認都是流。如果你有300個10M json文件,你將得到300個獨立的分區或任務。如果您願意等待,您可以在一個核心上對此數據集執行大多數RDD操作。

如果您需要滑動窗口,那麼在Spark streaming軟件包中有很好的功能。但是你發佈的代碼段沒有問題,因爲它是!