2014-10-30 106 views
0

語境:groupByKey與數百萬行的關鍵

  • 聚集者皆具有潛在的數百萬行的關鍵。
  • 在行中添加要素。要做到這一點,我們必須知道前一行(按鍵和時間戳)。目前我們使用groupByKey並在Iterable上進行工作。

我們嘗試:

  • 添加更多的內存給執行程序/驅動器
  • 更改分區

更改允許執行人/驅動器工作內存的數量。它只能用於關鍵的10k或100k行。關於將來可能發生的關鍵數百萬行的情況。

似乎沒有對那種問題的一些工作:https://github.com/apache/spark/pull/1977

但它是專用於PySpark而不是我們使用Scala的API目前

我的問題是:

  • 我知道我必須專門在PySpark中工作,等待處理這種類型的 問題的新功能是否更好?
  • 另一個解決方案是使用一些特定的鍵和值來處理我的需求,從而實現不同的工作流程。任何設計模式。例如,需要通過按鍵和按時間戳來添加提前預置行?

回答

1

我認爲這個問題的變化只是讓PySpark的工作更像主要的API。無論如何,您可能不希望設計一個每個鍵都需要大量值的工作流程。除了以不同的方式設計外,沒有其他解決方案。

我還沒有嘗試過這一點,並且只能相當肯定這種行爲是有保證的,但是,也許你可以在整個數據集上使用sortBy時間戳,然後使用foldByKey。您提供了一個將前一個值合併到下一個值中的函數。這應該通過時間戳來遇到數據。所以你每次看t行,t + 1,每增加一行就可以返回第t + 1行。

+0

Thx爲答覆肖恩。不知道關於foldByKey,我會嘗試。問題依然存在,用於通過密鑰對所有數據進行聚合。我不知道該怎麼做。 – jnaour 2014-10-30 12:42:51

+0

對於我只需要前一個元素的部分,在搜索之後,可以使用zipWithIndex來連接兩個RDD:索引和索引+ 1,這樣我就可以在一行中獲得所需的所有數據。很多過程需要一個簡單的需求,但我不確定是否有更好的解決方案... – jnaour 2014-10-30 13:50:20