我们如何在Spark中使用Dataframes(由structtype方法创建)具有不同列数的UnionAll 2表?

时间:2016-11-15 09:34:37

标签: apache-spark dataframe hbase spark-dataframe

我有两个在Spark中使用StructType方法创建的数据帧。 它们的列数不等。 需要联合他们。请帮助。

1 个答案:

答案 0 :(得分:1)

  

不可能使用Spark数据帧,而不是添加虚拟列

     

DataFrame UninonAll就像你需要的SQL联盟一样   具有相同数量的列和相同的数据类型...

union all基本要求是类型,RDBMS sql或DataFrames中的顺序应相同。

表示它们返回相同数量的列,相应的列具有兼容的数据类型

因此,您可以创建具有相同名称/类型的虚拟列,以符合联合要求。

  

unionAll public DataFrame unionAll(DataFrame other)

     

返回一个新的DataFrame,其中包含此框架中的行和   另一帧。这相当于SQL中的UNION ALL。

     

参数:

     

其他 - (无证件)

     

返回:

     

(无证)

     

自:

     

1.3.0

SQL示例:

案例1:

**可能:其中a(int数据类型),b(int数据类型),c(int数据类型)& x(int数据类型),y(int数据类型),z(int数据类型)是相同的数据类型**

select a, b, c from table1 
unionall
select x,y,z from table2 

案例2:

**不可能:其中a(int type),b(int type),c(int type)& p(int type),q(int type),r(int type),x(String type),y(int type),z(String type)**

select a, b, c from table1 
 unionall
select p, q,r, x,y,z from table2 

案例3:

为了使您可以向表1添加虚拟列  x(字符串类型),y(int类型),z(字符串类型)

在这种情况下,我添加了虚拟列" dasarathy"作为x,2作为y," dr" as z

 select a, b, c, "dasarathy" as x, 2 as y, "dr" as z from table1 
     unionall
    select p, q,r, x,y,z from table2 

对于数据帧也是如此。

结论:如果绝对需要,您可以向数据帧添加虚拟列(使用withColumn)以生成dataframe1 unionall dataframe2