我有两张 hive 桌 A
以及 B
以及它们各自的Dataframe df_a
以及 df_b
```
A
+----+----- +-----------+
| id | name | mobile1 |
+----+----- +-----------+
| 1 | Matt | 123456798 |
+----+----- +-----------+
| 2 | John | 123456798 |
+----+----- +-----------+
| 3 | Lena | |
+----+----- +-----------+
B
+----+----- +-----------+
| id | name | mobile2 |
+----+----- +-----------+
| 3 | Lena | 123456798 |
+----+----- +-----------+
想做一个类似于
select A.name, nvl(nvl(A.mobile1, B.mobile2), 0) from A left outer join B on A.id = B.id
到目前为止我已经想出了
df_a.join(df_b, df_a("id") <=> df_b("id"), "left_outer").select(?)
我也不知道如何有条件地选择 `mobile1` 或者 `mobile2` 或者 `0` 就像我在Hive查询中做的那样。
有人能帮我吗?我用的是spark 1.5。
2条答案
按热度按时间0dxa2lsx1#
您可以使用sparksql的nanvl函数。使用后应类似于:
hts6caw32#
使用合并:
如果存在,则使用mobile1;如果不存在,则使用mobile2;如果不存在mobile2,则使用0