使用 Scala 基于两个数据框的连接列创建新列

To create a new column based on the joining column of two data frames using scala

我有两个 table 列 table1 有 id,name table2 只有 id

table 1
--------------
id     name
--------------
1   sudheer
2   sandeep
3   suresh
----------------

table2

--------
id
-------- 
1
2
-------

required table should be if "id" column doesn't exist in the table2 my new column value should be "N" otherwise "Y"

table3

id  name        IND
1   sudheer     Y
2   sandeep     Y
3   suresh      N

我尝试了以下步骤来解决:

val df = hc.sql("select * from table1")
val df1 = hc.sql("select * from table2")

我试图在 table2 中再添加一列 (phone),因为我的连接数据框不包含来自 table2 的 ID,基于该空值值 我尝试将值设置为 Y/N

val df2 = df.join(df1,Seq("id"),"left_outer").withColumn("IND",exp(when(df1("phone")!= "null","Y").otherwise("N")))

但这并没有解决错误 发现:布尔值 要求:org.apache.spark.sql.Column

任何人都可以建议如何在不向我的 table2 添加列的情况下获得所需的结果吗?

您可以使用默认值 "Y"jointable2 中添加一个新列,并将 null 值替换为 "N"

val df1 = Seq(
    (1, "sudheer"),
    (2, "sandeep"),
    (3, "suresh")
).toDF("id", "name")

val df2 = Seq(1, 2).toDF("id")
         .withColumn("IND", lit("Y"))

val df3 = df1.join(df2, Seq("id"), "left_outer")
             .na.fill("N")

或者您可以像

一样使用 when
val df3 = df1.join(df2, Seq("id"), "left_outer")
         .withColumn("IND", when($"IND".isNull, "N").otherwise("Y"))

希望对您有所帮助!