Java Spark中的Join 2数据集< Row>合并为单个数据集< Row>[关闭]

xienkqul  于 2023-11-22  发布在  Apache
关注(0)|答案(1)|浏览(191)

已关闭。此问题需要details or clarity。目前不接受回答。
**要改进此问题吗?**通过editing this post添加详细信息并阐明问题。

22天前关闭。
Improve this question
我有两个数据集


的数据



我希望结果是一个数据集,它是两个结果数据集的组合



使用Java Spark
我试着做简单的连接

dataset1.join(dataset2).show();

字符串
但我得到一个错误
检测到逻辑计划之间的INNER联接的隐式Carnival产品
其他方式我绑做全外接

dataset1.join(dataset2,dataset1.col("A").equalTo(dataset2.col("B")),"outer").show();


但它的输入为空



但我希望结果是这样的



有人能给我建议另一种做这件事的方法吗

hgtggwj0

hgtggwj01#

对于具有相同位置的连接行,可以通过Window row_number函数将位置添加到每个数据集,并通过此列执行外部连接。在Scala上,guess可以轻松转换为Java:

val first = Seq(
  ("as", 7),
  ("bs", 5),
  ("cs", 3),
  ("ds", 1)
).toDF("A", "B")

val second = Seq(
  ("rs", 1, 3, 5),
  ("rd", 3, 6, 8)
).toDF("C", "D", "E", "F")

val naturalOrderWindow = Window.orderBy(lit(1))
val result = first
  .withColumn("position", row_number().over(naturalOrderWindow))
  .join(second.withColumn("position", row_number().over(naturalOrderWindow)), Seq("position"), "outer")
  .drop("position")

字符串
结果是:

+---+---+----+----+----+----+
|A  |B  |C   |D   |E   |F   |
+---+---+----+----+----+----+
|as |7  |rs  |1   |3   |5   |
|bs |5  |rd  |3   |6   |8   |
|cs |3  |null|null|null|null|
|ds |1  |null|null|null|null|
+---+---+----+----+----+----+


注意:使用没有分区的窗口,性能可能会很差。

相关问题