如何使用 joinWith 连接 2 个以上的数据集?

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时,你得到的是一个新的元组数据集:(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,以获得正确的列名。