spark sql中如何解決並行度低的問題?

2021-10-01 22:20:36 字數 1014 閱讀 6888

1.spark.default.parrallelism

2.textfile()傳入第二個引數,指定partition數量

但是如果使用來spark sql,用spark sql的那個stage的並行度,你沒辦法自己指定,因為spark sql 自己會預設根據hive表對應的hdfs的block,自動設定spark sql查詢所在的那個stage的並行度。

你自己通過spark.default.parallelism引數指定的並行度,只會在沒有spark sql的stage中生效。

比如:你的第乙個stage,用spark sql從hive表中查詢了一些資料,然後做了一些transformation操作,接著做了乙個shuffle操作(例如groupbykey);下乙個stage,在stage之後,做了一些transformation操作。

hive表,對應了乙個hdfs檔案,有20個block;你自己設定了spark.default.parallelish引數為100;

你的第乙個stage的並行度,是不受你設定的引數控制的,就只有20task;第二個stage的並行度,才是你自己設定的100;

這樣會產生的問題就是:在第乙個stage中,可能有非常複雜的業務邏輯或者演算法,如果只有預設的20個並行度的話,每個task要處理很大的資料量,這就會導致第乙個stage執行的速度特別慢。而第二個就很快。

直接對spark sql查詢出來的rdd使用repartition,進行重新分割槽。

三種設定方式:

直接設定分割槽數量

dataframe.repartition(10)

根據字段進行分割槽,分割槽數量由 spark.sql.shuffle.partition 決定

dataframe.repartition(

根據字段進行分割槽,將獲得100個分割槽的dataframe,這種方式可以在join的時候極大的提高效率,但是同時得注意出現資料傾斜的問題

dataframe.repartition(100,"name")¨k9kdataframe.repartition(100,"name")

SqlServer中如何解決session阻塞問題

簡介 對於資料庫運維人員來說建立session或者查詢時產生問題是常規情況,下面介紹一種很有效且不借助第三方工具的方式來解決類似問題。最近開始接觸運維工作,所以自己總結一些方案便於不懂資料庫的同事解決一些不太緊要的資料庫問題。類似方法很多理論也很多,我就不做深究,就是簡單寫乙個方案,便於菜鳥使用的。...

如何解決併發

雖然從巨集觀上,處理器是並行處理多項任務,但本質上乙個處理器在某個時間點只能處理乙個任務,屬於序列執行。在單處理器的情況下,併發問題源於多道程式設計系統的乙個基本特性 程序的相對執行速度不可 它取決於其他程序的活動 作業系統處理中斷的方式以及作業系統的排程策略。在分布式環境下,併發產生的可能性就更大...

git如何解衝突 如何解決Git中的合併衝突

我發現合併工具很少能幫助我理解衝突或解決方案。我通常更成功地在文字編輯器中檢視衝突標記並使用git log作為補充。提示一我發現的最好的事情是使用 diff3 合併衝突樣式 git config merge.conflictstyle diff3 這會產生如下衝突標記 the common ance...