2017-08-01 58 views
2

我有2个数据框:df1和df2,我将它们都连接到id列并将其保存到另一个名为df3的数据框。下面是我使用的代码,它可以正常工作。当从数据框中选择时重命名列名

val df3 = df1.alias("tab1").join(df2.alias("tab2"),Seq("id"),"left_outer").select("tab1.*","tab2.name","tab2.dept","tab2.descr"); 

我想重命名tab2.descr列在上述声明中dept_full_description。

我知道我可以创建一个SEQ VAL像下面并使用toDF方法

val columnsRenamed = Seq("id", "empl_name", "name","dept","dept_full_description") ; 
df4 = df3.toDF(columnsRenamed: _*); 

有没有在第一语句本身混淆任何其他方式。我的最终目标不是明确列出大约30-40列。

回答

1

我会重命名加入前:

df1.alias("tab1").join(
    df2.withColumnRenamed("descr", "dept_full_description").alias("tab2"), 
    Seq("id"), "left_outer") 
+1

酷,这工作, 非常感谢。 –

0

另一种简单的方式来实现,而选择,除了使用withColumnRenamed API更名为列,是使用.as别名

import sqlContext.implicits._ 
val df3 = df1.alias("tab1").join(df2.alias("tab2"),Seq("id"),"left_outer").select($"tab1.*",$"tab2.name",$"tab2.dept",$"tab2.descr".as("dept_full_description"));