2016-05-31 49 views
0

我有點火花的問題,以過濾大數據文件。CSV分區,地圖和火花過濾器

在CSV文件中有一個NxM尺寸的矩陣(不包括標題和其他標籤),如果過濾函數爲true,則需要過濾每一列,以得到該行的編號。

首先,我使用databricks包加載文件,然後繼續映射和過濾列。當我使用小型測試用例時,它確實有效,但在實際情況下,它永遠不會結束。據我所知,爲了加速Spark的執行,我需要獲取分區,因此每個執行程序都可以並行執行任務。考慮到這一點,我認爲最好的方案是爲每個執行器(M個分區)分配一列,所以沒有人需要在內存中加載完整的csv。那可能嗎?

讓它更簡單,設想一個NxM矩陣充滿0和1的15k x 5k。我想在哪裏計算每列有多少1。

1 0 0 0 1 0 0 0 1 
0 1 0 0 1 0 1 0 1 
1 0 0 0 1 0 0 0 1 
0 1 0 0 1 0 1 0 1 
1 0 0 0 1 0 0 0 1 
0 1 0 0 1 0 1 0 1

作爲DF的databricks數據框,我可以這樣過濾一列:

df.rdd.map(lambda r: r.C0).filter(lambda x: x == str(1)).count()
不過這將加載所有的數據,並沒有在我的集羣完成。

回答

0

如果您使用整數架構加載數據,則可以使用總和,它將比字符串比較更有效。

sc.textFile(yourfile).map(lambda line: [int(x) for x in line.split(";")])