我有 2 个数据框想要加入。
DF1:
root
|-- myStruct: struct (nullable = true)
| |-- id: string (nullable = true)
| |-- region: long (nullable = true)
|-- first_name: string (nullable = true)
DF2:
root
|-- id: string (nullable = true)
|-- region: long (nullable = true)
|-- second_name: string (nullable = true)
我的加入声明是
df1.join(df2, Seq("id", "region"), "leftouter")
但这失败了
USING column `id` cannot be resolved on the left side of the join. The left-side columns: myStruct, first_name
我在 Scala 上运行 Spark 2.2
您可以使用.
从中选择元素的符号struct
柱子。所以要选择id
from df1你必须做myStruct.id
并选择region
你必须使用myStruct.region
.
And 因为要使用的列名不相同您可以使用===
比较符号为
df1.join(df2, df1("myStruct.id") === df2("id") && df1("myStruct.region") === df2("region"), "leftouter")
你应该已经加入了数据框与以下schema
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)
You can dropjoin 或之后不必要的列select连接后仅需要列
我希望答案有帮助
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)