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

來源:互聯網
上載者:User

標籤:.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)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.