如何交叉加入2个数据帧?

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)


Nis*_*hay 8

升级到spark-sql_2.11版本2.1.0的最新版本并使用数据集的.crossJoin函数


phe*_*poo 4

在不使用连接条件的情况下调用与其他数据帧的连接。

看看下面的例子。给定人员的第一个数据框:

+---+------+-------+------+
| 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)

  • 数据框现在有一个名为“crossJoin”的方法用于交叉连接 (6认同)