[英]How do I set value to 0 of column with multiple statements in Pyspark and Palantir Foundry
[英]How do I identify the value of a skewed task of my Foundry job?
我調查了我的工作, 發現我確實有一項有偏差的任務。 我如何確定導致偏斜的任務中的實際值是多少?
我的 Python 轉換代碼如下所示:
from transforms.api import Input, Output, transform
@transform(
...
)
def my_compute_function(...):
...
df = df.join(df_2, ["joint_col"])
...
偏斜問題源於任何導致您工作交換的事情。 引起交換的東西包括但不限於: join
、 window
、 groupBy
。
這些操作會導致數據根據所使用的 DataFrame 中找到的值在 Executors 之間移動。 這意味着當使用過的 DataFrame 在指示交換的列上有許多重復值時,這些行最終都在同一個任務中,從而增加了它的大小。
讓我們為您的聯接考慮以下示例數據分布:
DataFrame 1 (df1)
| col_1 | col_2 |
|-------|-------|
| key_1 | 1 |
| key_1 | 2 |
| key_1 | 3 |
| key_1 | 1 |
| key_1 | 2 |
| key_2 | 1 |
DataFrame 2 (df2)
| col_1 | col_2 |
|-------|-------|
| key_1 | 1 |
| key_1 | 2 |
| key_1 | 3 |
| key_1 | 1 |
| key_2 | 2 |
| key_3 | 1 |
這些數據幀在col_1
上連接在一起時,將在執行程序中分布以下數據:
key_1
key_1
key_2
key_2
key_3
因此,如果您查看每個任務的輸入計數和 output 行,您會發現任務 1 的數據遠多於其他任務。 這個任務是傾斜的。
現在的問題是我們如何確定key_1
是偏差的罪魁禍首,因為這在 Spark(支持連接的底層引擎)中是不可見的。
如果我們看上面的例子,我們會發現我們需要知道的只是聯合列的每個鍵的實際計數。 這意味着我們可以:
最簡單的方法是在 Foundry 中打開分析(輪廓)工具並執行以下分析:
將df1
作為輸入添加到第一條路徑
添加Pivot Table
board,使用col_1
作為行, Row count
作為聚合
單擊⇄ Switch to pivoted data
按鈕
使用Multi-Column Editor
板只保留col_1
和COUNT
列。 為它們中的每一個添加前綴df1_
,從只有df1_col_1
和 df1_COUNT 的路徑中產生df1_COUNT
。
將df2
作為輸入添加到第二條路徑
添加Pivot Table
board,再次使用col_1
作為行, Row count
作為聚合
單擊⇄ Switch to pivoted data
按鈕
使用Multi-Column Editor
板只保留col_1
和COUNT
列。 用df2_
為它們中的每一個添加前綴,從只有df2_col_1
和 df2_COUNT 的路徑中產生df2_COUNT
。
使用第一條路徑( df1_col_1
和df1_COUNT1
)的結果創建第三條路徑
添加一個連接板,使Join
的右側成為第二條路徑( df2_col_1
和df2_col_1
)的結果。 確保連接類型是Full join
從右側開始添加所有列(不需要加前綴,所有列都是唯一的
配置加入板以加入df1_col_1
等於df2_col_1
添加一個Expression
板以創建一個新列output_row_count
,它將兩個COUNT
列相乘
添加一個按output_row_count
降序排序的Sort
板
如果您現在預覽結果數據,您將得到一個來自連接兩側的導致偏斜的鍵的排序列表
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.