簡體   English   中英

Spark:使用Python的危險

[英]Spark: Dangers of using Python

在“ Spark:權威指南”一書中(當前是早期版本,文本可能會更改),作者建議不要在Spark中將Pyspark用於用戶定義的功能:

“啟動此Python進程非常昂貴,但實際成本卻是將數據序列化為Python。這之所以昂貴,有兩個原因,這是昂貴的計算,而且一旦數據進入Python,Spark就無法管理工作程序的內存。這意味着,如果它變得受到資源限制,可能會導致工作程序失敗(因為JVM和python都在同一台機器上爭奪內存)。”

我知道Python和JVM之間爭用工作節點資源可能是一個嚴重的問題。 但這對駕駛員也不適用嗎? 在這種情況下,將完全反對使用Pyspark。 誰能解釋一下導致司機情況不同的原因嗎?

一般而言,與使用PySpark相比,這更是反對使用Python UDF的爭論,並且在較小程度上,可以針對本機(在JVM上實現)UDF做出類似的爭論。

您還應該注意, 矢量化UDF位於Spark路線圖上,因此:

真正的代價是將數據序列化到Python

將來可能不再需要關注。

但這對駕駛員也不適用嗎?

沒那么多。 盡管共享單個節點的資源始終是一個問題(考慮其他服務的並置),但UDF的問題非常具體-相同的數據必須同時存儲在兩個不同的上下文中。

例如,如果您選擇加入RDD API,則JVM主要用於通信層,並且開銷要小得多。 因此,盡管您可能會找到一些更適合的本機Python工具,但對於本機Python計算而言,這是更自然的選擇。

在驅動程序應用程序中,您不必一定要collect大量的記錄。 也許您只是在簡化一些統計數據。

這只是典型的行為:駕駛員通常處理統計結果。 你的旅費可能會改變。

另一方面,Spark應用程序通常使用執行程序來讀取其內存允許的盡可能多的數據並進行處理。 因此,內存管理幾乎總是一個問題。

我認為這是本書所要達到的區別。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM