在scala spark中使用full join连接两个 Dataframe

wkyowqbh  于 2023-04-21  发布在  Scala
关注(0)|答案(1)|浏览(279)

我有两个 Dataframe

Dataframe1:
 "a","x"
  1 , 2
  3 , 4
  2 , 5

Dataframe2:
 "a","y"
  1 , 3
  3 , 5
  7 , 6

我想创建一个新的DataFrame,它类似于

"a", "x" , "y"
  1    2     3
  3    4     5
  2    5     null
  7    null  6

我尝试使用joins,但它创建了joined键的两个新列。我应该如何继续?

vlf7wbxs

vlf7wbxs1#

你可以使用join并指定你想要基于(“a”column)进行join的列,Spark会在join后自动删除不必要的列

import org.apache.spark.sql.functions._
import org.apache.spark.sql.SparkSession

object test extends App {
  val spark = SparkSession.builder().master("local[*]").getOrCreate()
  import spark.implicits._
  val df1 = Seq((1, 2), (3, 4), (2, 5)).toDF("a", "x")
  val df2 = Seq((1, 3), (3, 5), (7, 6)).toDF("a", "y")

  val resultDF = df1.join(df2, Seq("a"), "outer")
  resultDF.show()
//  +---+----+----+
//  |  a|   x|   y|
//  +---+----+----+
//  |  1|   2|   3|
//  |  3|   4|   5|
//  |  7|null|   6|
//  |  2|   5|null|
//  +---+----+----+

这是Join方法的格式

def join(right: Dataset[_], usingColumns: Seq[String], joinType: String): sql.DataFrame

使用给定的列与另一个DataFrame对等连接。
与其他join函数不同,join列在输出中只出现一次,即类似于SQL的JOIN USING语法。
参数:
right -连接操作的右侧。

usingColumns-要连接的列的名称,该列必须两边都存在。

joinType -要执行的联接的类型。

相关问题