![](/img/trans.png)
[英]Using Spark SQL joinWith, how can I join two datasets to match current records with their previous records based on date?
[英]How do I use joinWith to join more than 2 datasets?
我想实现以下目标:
x.joinWith(y, x(id) === y(fid), "left_outer")
.joinWith(z, x(id) === z(fid))
.map(case {(x, y, z) => combineXYZ(x, y, z)})
当使用joinWith
,得到的是Tuple2的新数据集: (x, y)
。 因此,列名称为_1
和_2
。
因此,当您进行第二次连接时,需要从元组而不是源数据集中的一个引用列名。 像那样 :
x.joinWith(y, x(id) === y(fid), "left_outer").joinWith(z, $"_1.id" === z(fid))
现在,您得到的是一个tuple2,其中第一个元素也是一个元组: ((x, y), z)
。 因此,您必须将地图绘制为:
.map(case {((x, y), z) => combineXYZ(x, y, z)})
这应该工作。 请注意,如果您不想使用$"_1.id
,这是完全可以理解的,则可以在首次加入后进行映射,以创建除tuple2之外的新对象,以获得正确的列名。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.