取消
顯示的結果
而不是尋找
你的意思是:

有沒有更好的方法加入兩個dataframes沒有重複的列?

kruhly
新的貢獻者二世

我想保持隻有一列加入dataframes使用。使用select()加入後似乎並不直接,因為真實的數據可能會有很多列或列名稱可能不被人知道的。下麵一個簡單的例子

llist =[(“鮑勃”,“2015-01-13”,4),(“愛麗絲”,“2015-04-23”,10)]地區指定基金= sqlContext.createDataFrame (llist,(“名字”,“日期”,'時間'])打印ddf.collect () up_ddf = sqlContext。createDataFrame([(“愛麗絲”,100年),(“鮑勃”、23)],[“名稱”,“上傳”])

這讓“名稱”列當我們隻需要一個!

df =地區指定基金。加入(up_ddf ddf.name = = up_ddf.name)打印ddf.collect()顯示(ddf.select (ddf.name, ddf.duration / ddf.upload .alias (duration_per_upload)))

執行上麵顯示導致一個模棱兩可的名字錯誤:

org.apache.spark.sql。AnalysisException:引用“名字”是模棱兩可的,可以是:名字# 8484,# 8487。

錯誤可以避免通過使用從右手dataframe up_ddf.name加入

ddf.select (up_ddf.name……

但是似乎尷尬。有沒有更好的方法加入兩個dataframes和隻有一個“名稱”列?

12個回複12

Harshil
新的貢獻者二世

注意到類似的行為。即使指定right_dataframe.col (“columnname”)在過濾條件或刪除函數它使用leftdatframe.col (“columnname”)執行期間。

Carrod
新的貢獻者二世

在python中,我們可以解決這個問題:

0693年f000007ormxaac

和在java中,我們可以使用:

公共數據集<行>加入(數據集< ?>對,scala.collection。Seq <字符串> usingColumns,字符串joinType)

更多的http://spark.apache.org/docs/2.1.0/api/java/index.html

根據問題:

http://stackoverflow.com/questions/35988315/convert-java-list-to-scala-seq

usingColumns參數可以定義為ArrayList。

TejuNC
新的貢獻者二世

這是一個預期行為。

DataFrame.join

這樣的方法是等價的SQL join

SELECT * FROM joinExprs加入b

如果你想忽略重複的列隻是下降他們感興趣的或選擇列。如果你想消除歧義可以使用訪問這些使用父

DataFrames

:

瓦爾:DataFrame = ? ? ?val b: DataFrame = ? ? ?val joinExprs:列= ? ? ?

一個。加入(b, joinExprs) .select ((" id "), b (" foo ")) / /下降相當於a.alias (“a”) . join (b.alias (b), joinExprs) .drop (b (" id ")) .drop ((" foo "))

或者使用別名:

/ /對於現在的別名不處理掉a.alias (“a”) . join (b.alias (b), joinExprs) .select ($”。id”,“b.foo”)

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map