我想合并几个具有几个不同列的DataFrame。认为 ,
DataFrame A具有3列:Column_1,Column_2,Column 3
DataFrame B具有3列:Column_1,Columns_2,Column_4
DataFrame C具有3列:Column_1,Column_2,Column_5
我想合并这些DataFrame,这样我就得到一个DataFrame:
Column_1,Column_2,Column_3,Column_4 Column_5
DataFrame的数量可能会增加。有什么办法可以合并吗?这样,对于特定的Column_1 Column_2组合,我将获得同一行中其他三列的值;如果对于Column_1 Column_2的特定组合,某些列中没有数据,则该列应显示为null。
数据框A:
Column_1 Column_2 Column_3
1 x abc
2 y def
数据框B:
Column_1 Column_2 Column_4
1 x xyz
2 y www
3 z sdf
A和B的合并:
Column_1 Column_2 Column_3 Column_4
1 x abc xyz
2 y def www
3 z null sdf
如果我正确理解了您的问题,则需要使用一系列列作为键来执行外部联接。
我用您的问题中提供的数据来举例说明如何完成此工作:
scala> val df1 = Seq((1,"x","abc"),(2,"y","def")).toDF("Column_1","Column_2","Column_3")
// df1: org.apache.spark.sql.DataFrame = [Column_1: int, Column_2: string, Column_3: string]
scala> val df2 = Seq((1,"x","xyz"),(2,"y","www"),(3,"z","sdf")).toDF("Column_1","Column_2","Column_4")
// df2: org.apache.spark.sql.DataFrame = [Column_1: int, Column_2: string, Column_4: string]
scala> val df3 = df1.join(df2, Seq("Column_1","Column_2"), "outer")
// df3: org.apache.spark.sql.DataFrame = [Column_1: int, Column_2: string, Column_3: string, Column_4: string]
scala> df3.show
// +--------+--------+--------+--------+
// |Column_1|Column_2|Column_3|Column_4|
// +--------+--------+--------+--------+
// | 1| x| abc| xyz|
// | 2| y| def| www|
// | 3| z| null| sdf|
// +--------+--------+--------+--------+
这就是所谓的equi-join
与其他DataFrame
使用给定的列。
它与其他联接函数不同,联接列将仅在输出中出现一次,即类似于SQL的JOIN USING
语法。
笔记
从Spark 1.6开始提供外部等联接。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句