如何从一个Dataframe中选择结果列,同时在spark中与另一个Dataframe连接?

uwopmtnx  于 2021-07-14  发布在  Spark
关注(0)|答案(1)|浏览(358)

我有两个Dataframe:

val df1 = List(("Sid", 1), ("Teni", 2), ("Bob", 3), ("Spark", 4), ("Hbase", 5)).toDF("name", "value")
val df2 = List(("Sidhartha", 1), ("Tammineni", 2), ("Bobby", 3), ("Spark", 4)).toDF("name", "value")

在外部连接中连接这两个Dataframe之后,我得到了下面的Dataframe。

scala> df1.join(df2, Seq("value"), "outer").show()
+-----+---------+-----+---------+-----+
|value|     name|state|     name|state|
+-----+---------+-----+---------+-----+
|    1|      Sid|  odd|      Sid|  odd|
|    3|      Bob|  odd|      Bob|  odd|
|    5|    Hbase|  odd|     null| null|
|    4|    Spark| even|    Spark| even|
|    2|     Teni| even|     Teni| even|
+-----+---------+-----+---------+-----+

为了避免在最终输出中出现重复的列,我尝试使用

df1.join(df2, Seq("name", "state", "value"), "outer").show()

但在结果中,我看到数据来自 df1 . 即使我想以另一种方式加入 df2.join(df1, ... outer) ,我仍然可以看到 df1 如下所示。

+---------+-----+-----+
|     name|state|value|
+---------+-----+-----+
|     Teni| even|    2|
|    Spark| even|    4|
|    Hbase|  odd|    5|
|      Bob|  odd|    3|
|      Sid|  odd|    1|
+---------+-----+-----+

我尝试在join之后从特定的dataframe中选择列,如下所示:

df1.join(df2, Seq("value"), "outer").select(df2("name","value","state")).show()
<console>:28: error: too many arguments (3) for method apply: (colName: String)org.apache.spark.sql.Column in class Dataset
       df1.join(df2, Seq("value"), "outer").select(df2("name","value","state")).show()

scala> df1.join(df2, Seq("value"), "outer").df2("name","value","state").show()
<console>:28: error: value df1 is not a member of org.apache.spark.sql.DataFrame
       df1.join(df2, Seq("value"), "outer").df2("name","value","state").show()

在本例中,我试图查看 df2 连接操作之后。我还能做到吗?

gmol1639

gmol16391#

选择多列的语法应该是逐个指定每一列,例如。

df1.join(df2, Seq("value"), "outer").select(df2("name"), col("value")).show
+---------+-----+
|     name|value|
+---------+-----+
|Sidhartha|    1|
|    Bobby|    3|
|     null|    5|
|    Spark|    4|
|Tammineni|    2|
+---------+-----+

请注意 value 不应附加到任何Dataframe,但应使用 col ,因为它被用作连接柱。

相关问题