单个字段链接:
df.join(df2,"user").show()
输出为:
+----+---+----+--------------------+---+
|user| id|type| visittime|sex|
+----+---+----+--------------------+---+
| 1| 1| 助手1|2017-08-10 13:44:...| 男|
| 1| 2|APP1|2017-08-04 13:44:...| 男|
| 1| 11|APP1|2017-07-15 13:45:...| 男|
| 1| 12| 助手2|2017-07-07 13:45:...| 男|
| 2| 3| 助手1|2017-08-05 13:44:...| 女|
| 2| 4| 助手1|2017-08-07 13:44:...| 女|
| 2| 9|APP2|2017-08-11 13:44:...| 女|
| 2| 10| 助手1|2017-07-14 13:44:...| 女|
+----+---+----+--------------------+---+
多个字段链接:
using形式:df.join(df2,Seq("id","user")) //因为类似于a join b using column1的形式
column类型:df.join(df2,df("user")===df2("user"))
使用外连接:df.join(df2,df("user")===df2("user"),"outer").show()
输出:
+----+----+----+--------------------+----+----+
| id|user|type| visittime|user| sex|
+----+----+----+--------------------+----+----+
| 1| 1| 助手1|2017-08-10 13:44:...| 1| 男|
| 2| 1|APP1|2017-08-04 13:44:...| 1| 男|
| 11| 1|APP1|2017-07-15 13:45:...| 1| 男|
| 12| 1| 助手2|2017-07-07 13:45:...| 1| 男|
| 5| 3|APP1|2017-08-02 13:44:...|null|null|
| 6| 3|APP1|2017-08-01 13:44:...|null|null|
| 7| 3| 助手2|2017-08-14 13:44:...|null|null|
| 8| 3|APP2|2017-08-03 13:44:...|null|null|
| 3| 2| 助手1|2017-08-05 13:44:...| 2| 女|
| 4| 2| 助手1|2017-08-07 13:44:...| 2| 女|
| 9| 2|APP2|2017-08-11 13:44:...| 2| 女|
| 10| 2| 助手1|2017-07-14 13:44:...| 2| 女|
|null|null|null| null| 5| 男|
+----+----+----+--------------------+----+----+
我们可以看到,默认的链接方式是内链接,当然我们已可以使用其他的方式,通过第三个参数来指定。我们可以指定的类型有inner, outer, left_outer, right_outer, leftsemi类型,不过只有using形式指定两个及以上字段以及使用Column类型来链接的时候可以指定链接方式。
比如下面的方式是错误的:df.join(df2,"user","outer").show()