Mir*_*han 9 apache-spark apache-spark-sql spark-dataframe
我正在努力获得2个数据帧的CROSS JOIN.我正在使用spark 2.0.如何用2个数据帧实现CROSSS JOIN.
编辑:
val df=df.join(df_t1, df("Col1")===df_t1("col")).join(df2,joinType=="cross join").where(df("col2")===df2("col2"))
Run Code Online (Sandbox Code Playgroud)
小智 9
crossJoin如果不需要指定条件则使用
这是工作代码的一部分:
people.crossJoin(area).show()
Run Code Online (Sandbox Code Playgroud)
在不使用连接条件的情况下调用与其他数据帧的连接。
看看下面的例子。给定人员的第一个数据框:
+---+------+-------+------+
| id| name| mail|idArea|
+---+------+-------+------+
| 1| Jack|j@j.com| 1|
| 2|Valery|x@v.com| 1|
| 3| Karl|k@k.com| 2|
| 4| Nick|n@n.com| 2|
| 5| Luke|l@f.com| 3|
| 6| Marek|a@b.com| 3|
+---+------+-------+------+
Run Code Online (Sandbox Code Playgroud)
和区域的第二个数据框:
+------+--------------+
|idArea| areaName|
+------+--------------+
| 1|Amministration|
| 2| Public|
| 3| Store|
+------+--------------+
Run Code Online (Sandbox Code Playgroud)
交叉连接简单地由下式给出:
val cross = people.join(area)
+---+------+-------+------+------+--------------+
| id| name| mail|idArea|idArea| areaName|
+---+------+-------+------+------+--------------+
| 1| Jack|j@j.com| 1| 1|Amministration|
| 1| Jack|j@j.com| 1| 3| Store|
| 1| Jack|j@j.com| 1| 2| Public|
| 2|Valery|x@v.com| 1| 1|Amministration|
| 2|Valery|x@v.com| 1| 3| Store|
| 2|Valery|x@v.com| 1| 2| Public|
| 3| Karl|k@k.com| 2| 1|Amministration|
| 3| Karl|k@k.com| 2| 2| Public|
| 3| Karl|k@k.com| 2| 3| Store|
| 4| Nick|n@n.com| 2| 3| Store|
| 4| Nick|n@n.com| 2| 2| Public|
| 4| Nick|n@n.com| 2| 1|Amministration|
| 5| Luke|l@f.com| 3| 2| Public|
| 5| Luke|l@f.com| 3| 3| Store|
| 5| Luke|l@f.com| 3| 1|Amministration|
| 6| Marek|a@b.com| 3| 1|Amministration|
| 6| Marek|a@b.com| 3| 2| Public|
| 6| Marek|a@b.com| 3| 3| Store|
+---+------+-------+------+------+--------------+
Run Code Online (Sandbox Code Playgroud)