問題
datafrme提供了強大的JOIN操作,但是在操作的時候,經常發現會碰到重復列的問題。在你不注意的時候,去用相關列做其他操作的時候,就會出現問題!
假如這兩個字段同時存在,那么就會報錯,如下:org.apache.spark.sql.AnalysisException: Reference 'key2' is ambiguous
實例
1.創建兩個df演示實例
val df = sc.parallelize(Array( ("yuwen", "zhangsan", 80), ("yuwen", "lisi", 90), ("shuxue", "zhangsan", 90), ("shuxue", "lisi", 95) )).toDF("course", "name", "score")
顯示:df.show()
val df2 = sc.parallelize(Array( ("yuwen", "zhangsan", 90), ("shuxue", "zhangsan", 100) )).toDF("course", "name", "score")
顯示:df2.show
關聯查詢:
val joined = df.join(df2, df("cource") === df2("cource") && df("name") === df2("name"), "left_outer")
結果展示:
這時候問題出現了這個地方出現了三個兩兩相同的字段,當你在次操作這個字段的時候就出問題了。
解決問題
1.你可以使用的時候指定你要用哪個df里面的字段
joined.select(df("course"),df("name")).show
結果:
2.你可以刪除多余的列,在實際情況中你不可能將兩張完全一樣的表進行關聯,一般就幾個字段的名字相同,這樣你可以刪除你不需要的字段
joined.drop(df2("name"))
結果:
3.就是通過修改JOIN的表達式,完全可以避免這個問題。主要是通過Seq這個對象來實現
df.join(df2, Seq("course", "name")).show()
結果: