使用 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"
和 join
在 table2
中添加一个新列,并将 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"))
希望对您有所帮助!
我有两个 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"
和 join
在 table2
中添加一个新列,并将 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"))
希望对您有所帮助!