我有两个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
连接操作之后。我还能做到吗?
1条答案
按热度按时间gmol16391#
选择多列的语法应该是逐个指定每一列,例如。
请注意
value
不应附加到任何Dataframe,但应使用col
,因为它被用作连接柱。