2017-10-09 70 views
1

我想知道爲什麼Dataflow不支持像Apache Spark那樣的「SortByKey」。爲什麼Dataflow不支持SortByKey?

我在BigQuery中有一個巨大的表,我無法對它進行排序,因爲「Order By」不可伸縮。所以,我正在考慮將BigQuery的輸出移到Dataflow並在那裏排序。但是,沒有SortByKey,我似乎必須編寫一個組合器。

任何建議,將不勝感激。

回答

1

排序(特別是按鍵)需要全局串行處理,這不是一個可伸縮的操作。 Apache Beam/Dataflow不提供這種支持,因爲它經常是不必要的。

有多種替代方案可以更加可擴展地滿足需求。例如,您可以對每個鍵中的值進行排序,這允許並行處理每個鍵。另一種常見的用例是全球或每個密鑰的TopN。同樣,這可以比實際排序更有效地得到支持。

您能詳細說明您需要進行排序嗎?爲什麼?這將有可能確定在Beam和Dataflow SDK中實現這些選項的選項。

+0

謝謝本。我有一個未分類的VCF(變體呼叫格式)文件。 KV ,對象>>。對我來說這是一個稀疏矩陣。我試圖在幾個子查詢(例如,每個染色體)之間對錶格進行分區,但由於其高成本,我更願意避免使用BigQuery。你有什麼建議? – AmirCS

+0

你可以更新你的問題來解釋你需要排序和什麼?根據你的描述,你不清楚你需要什麼樣的分類。例如,你似乎不應該需要全局排序。如果您將它更改爲'KV >',並在每個'ChromosomeID'中將它們按「Start」排序,則不需要全局排序 - 只需在每個鍵中進行排序即可。 –

+0

對不起,當然。你可以假設<染色體,開始>是主鍵。你的意思是groupByKey <染色體ID>,然後根據開始進行排序。但是,恐怕每個小組都可能不適合記憶。 – AmirCS