Scala:如何组合两个数据框?

Posted

技术标签:

【中文标题】Scala:如何组合两个数据框?【英文标题】:Scala: How to combine two data frames? 【发布时间】:2018-03-01 05:04:07 【问题描述】:

第一个 Df 是:

ID Name ID2 Marks
1   12    1   333

第二个 Df2 是:

ID Name ID2 Marks
1         3   989
7   98    8   878

我需要的输出是:

ID Name ID2 Marks
1   12    1   333
1         3   989
7   98    8   878

请帮忙!

【问题讨论】:

到目前为止你有什么?只是一个任务? 看这里..val newDFs = Seq(DF1,DF2,DF3) 【参考方案1】:

使用unionunionAll函数:

df1.unionAll(df2)
df1.union(df2)

例如:

scala> val a = (1,"12",1,333)
a: (Int, String, Int, Int) = (1,12,1,333)

scala> val b = (1,"",3,989)
b: (Int, String, Int, Int) = (1,"",3,989)

scala> val c = (7,"98",8,878)
c: (Int, String, Int, Int) = (7,98,8,878)

scala> import spark.implicits._
import spark.implicits._

scala> val df1 = List(a).toDF("ID","Name","ID2","Marks")
df1: org.apache.spark.sql.DataFrame = [ID: int, Name: string ... 2 more fields]

scala> val df2 = List(b, c).toDF("ID","Name","ID2","Marks")
df2: org.apache.spark.sql.DataFrame = [ID: int, Name: string ... 2 more fields]

scala> df1.show
+---+----+---+-----+
| ID|Name|ID2|Marks|
+---+----+---+-----+
|  1|  12|  1|  333|
+---+----+---+-----+


scala> df2.show
+---+----+---+-----+
| ID|Name|ID2|Marks|
+---+----+---+-----+
|  1|    |  3|  989|
|  7|  98|  8|  878|
+---+----+---+-----+


scala> df1.union(df2).show
+---+----+---+-----+
| ID|Name|ID2|Marks|
+---+----+---+-----+
|  1|  12|  1|  333|
|  1|    |  3|  989|
|  7|  98|  8|  878|
+---+----+---+-----+

【讨论】:

【参考方案2】:

一个简单的unionunionAll 应该可以为您解决问题

Df.union(Df2)

Df.unionAll(Df2)

如api文档中给出的

返回一个新的数据集,其中包含此数据集中的行与另一个数据集中的联合。 这相当于 SQL 中的UNION ALL。做一个 SQL 风格的集合并集(这样做 元素的重复数据删除),使用此函数后跟 [[distinct]]。 同样作为 SQL 中的标准,此函数按位置(而不是按名称)解析列。

【讨论】:

以上是关于Scala:如何组合两个数据框?的主要内容,如果未能解决你的问题,请参考以下文章

如何基于两列组合两个数据框? [复制]

java - 如何在java中组合(连接)具有相同列名的两个数据框

如何将两个组合框的选定项与单个数据源分开?

如何链接多个组合框表中的两个组合框?

如何组合两个数据框并自然地对混合字母数字类型的列进行排序?

使用 Microsoft Access 中的两个表单将参数从一个组合框传递到另一个组合框