ale*_*lov 2 join apache-spark apache-spark-sql
我有 2 个数据框想要加入。
DF1:
root
|-- myStruct: struct (nullable = true)
| |-- id: string (nullable = true)
| |-- region: long (nullable = true)
|-- first_name: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
DF2:
root
|-- id: string (nullable = true)
|-- region: long (nullable = true)
|-- second_name: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
我的加入声明是
df1.join(df2, Seq("id", "region"), "leftouter")
Run Code Online (Sandbox Code Playgroud)
但这失败了
USING column `id` cannot be resolved on the left side of the join. The left-side columns: myStruct, first_name
Run Code Online (Sandbox Code Playgroud)
我在 Scala 上运行 Spark 2.2
您可以使用.符号从列中选择元素struct。因此,要从df1id中进行选择,您必须使用.myStruct.idregionmyStruct.region
由于要使用的列名不同,您可以使用===符号进行比较:
df1.join(df2, df1("myStruct.id") === df2("id") && df1("myStruct.region") === df2("region"), "leftouter")
Run Code Online (Sandbox Code Playgroud)
您应该拥有具有以下架构的连接数据框
root
|-- myStruct: struct (nullable = true)
| |-- id: string (nullable = true)
| |-- region: long (nullable = false)
|-- first_name: string (nullable = true)
|-- id: string (nullable = true)
|-- region: integer (nullable = true)
|-- second_name: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)
您可以在加入后删除不需要的列或在加入后仅选择需要的列
我希望答案有帮助
| 归档时间: |
|
| 查看次数: |
3039 次 |
| 最近记录: |