Pyspark:如何根据 PySpark 中员工数据的存在情况分配组级标志”

问题描述 投票:0回答:1

假设有 10 条记录:

  • A 部门的 5 名员工:depA 中的一名员工没有净收入信息(因此其中有一个空值),其他 4 名员工确实有。
  • 5 在 DepB 中:在 DepB 中,每个 empl 都有 net_inc 信息。所以我想要 every_emp_net_inc_flag - 并且 depA 中的每个员工都会得到 0 - 因为并非所有人都有此信息,有人会错过它。在 DepB,他们都会得到 1,因为没有人错过这个净收入值。

我唯一的想法是某种窗口函数,它可以执行类似的操作(我将其重写为 pyspark,但更容易用 SQL 解释):

SELECT
   employee_id,
   department,
   CASE
       WHEN COUNT(*) OVER (PARTITION BY department) = COUNT(net_income) OVER (PARTITION BY department) 
       THEN 1
       ELSE 0
   END AS every_emp_net_inc_flag
FROM
   employees;

然后我会有 df1,其中 flag = 1,以及 df2,其中 flag = 0。

我正在尝试寻找更优雅的解决方案,但找不到任何解决方案。 谢谢

pyspark
1个回答
0
投票

嗨,这可以使用像这样更有效的方法来实现

Create or replace temp view tbla as 
 Select department,
 Min(CASE WHEN net_income is null then 0 else 1 end) income_missing_flag

来自员工

现在我们将上面的临时视图与原始表员工连接起来以获得标志

Select a.* ,b.income_missing_flag 
  From employees a left join tbla b 
 on a.department=b.department
© www.soinside.com 2019 - 2024. All rights reserved.