[在Scala中使用joinWith时如何仅返回左侧

问题描述 投票:0回答:1

所以我有以下内容,我尝试使用joinWith,我只想要左侧的内容,然后我想在该DataFrame上运行一个函数,我正在执行以下操作,但它不起作用

val df1 = Seq((1, "A1"), (2, "A2"), (3, "A3"), (4, "A4")).toDF("id", "value_left")
val df2 = Seq((3, "A3"), (4, "A4"), (4, "A4_1"), (5, "A5"), (6, "A6")).toDF("id", "value_right")

 val transformedDf: Dataset[Row] = df1
      .joinWith(df2, df1("id")===df2("id"),"inner")
      .map(_._1)
      .transform(anotherFunction)

在我尝试获得左侧之前,内部联接的输出看起来像这样,在这种情况下,我只希望左侧]]

INNER JOIN
+---+----------+-----------+
| id|value_left|value_right|
+---+----------+-----------+
|  3|        A3|         A3|
|  4|        A4|       A4_1|
|  4|        A4|         A4|
+---+----------+-----------+

所以我有以下内容,而我尝试使用joinWith,而我只想在左侧进行操作,然后我想在该DataFrame上运行一个函数,我正在执行以下操作,但它不起作用val。 ..

scala apache-spark-sql apache-spark-dataset
1个回答
0
投票

如果我对您的理解正确,则您不希望实际加入,但需要df1,并由df2中的ID过滤。看一下left_semi联接类型。如果您将代码更改为df1.joinWith(df2, df1("id")===df2("id"),"left_semi"),您应该会得到类似

© www.soinside.com 2019 - 2024. All rights reserved.