我正在尝试解决以下问题:
输入数据框:
+------+------+------------+
|emp |Group |Spouse |
+------+------+------------+
|John |L1 |Dana |
|Mary |L1 |Rick |
|Harry |L3 |Dana |
|Linda |L3 |Harry |
|Jim |L3 |Mary |
+------+------+------------+
逻辑:雇员的配偶不能与雇员属于同一组(必须从列表中删除那些配偶所在的行)
输出数据框:
+------+------+------------+
|Emp |Group |Spouse |
+------+------+------------+
|John |L1 |Dana |
|Mary |L1 |Rick |
|Linda |L3 |Harry |
|Jim |L3 |Mary |
+------+------+------------+
有人可以帮我解决这个问题吗?
答案 0 :(得分:0)
会为您解决吗?
df.createOrReplaceTempView("empl")
sql("select a.emp, a.Group, a.Spouse from empl a where exists (select 1 from empl b where a.Spouse = b.emp and a.Group <> b.Group)").show
答案 1 :(得分:0)
根据配偶和组列将数据框左连接为自身,然后根据连接的DF中的非空内容进行过滤,如果不需要,则删除连接的DF。像这样:
df.join(df.select($"emp".as("s_e"), $"Spouse".as("s_s"), $"Group".as("s_g")),
$"emp" <=> $"s_s" && $"Group" <=> $"s_g", "left").
filter($"s_e".isNull).
drop($"s_e", $"s_s", $"s_g")