![](/img/trans.png)
[英]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.