2017-08-01 60 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"));