標籤:.com 實現 www. spark 解決 ISE 通過 技術分享 enc
問題
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()
結果:
轉自:https://www.cnblogs.com/chushiyaoyue/p/6927488.html
spark關於join後有重複列的問題(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)