spark關於join后有重復列的問題(org.apache.spark.sql.AnalysisException: Reference '*' is ambiguous)


問題

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()

結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM