如果你在Spark中執行連接,並且沒有正確指定連接,你將會得到重複的列名。這使得選擇這些列變得更加困難。本文和筆記本演示了如何執行連接以避免列重複。
連接列上
如果你在列上連接,你會得到重複的列。
Scala
%scala val llist = Seq(("bob", "2015-01-13", 4), ("alice", "2015-04-23",10)) val left = llist. todf ("name","date","duration") val right = Seq(("alice", 100),("bob", 23)). todf ("name","upload") val df = left。加入(右,left.col(“名字”)= = = right.col(“名字”))
Python
% python llist =[(“鮑勃”,“2015-01-13”,4),(“愛麗絲”,“2015-04-23”,10)]=火花。createDataFrame(llist, ['name','date','duration']) right = spark。createDataFrame([(“愛麗絲”,100年),(“鮑勃”、23)],[“名稱”,“上傳”])df =。Join (right, left.name == right.name)
解決方案
將連接列指定為數組類型或字符串。
Scala
%scala val df = left。加入(右,Seq(“名字”))
%scala val df = left。“名稱”加入(右)
Python
%python df = left。(“名字”)加入(右)
%python df = left。“名稱”加入(右)
R
首先將數據幀注冊為表。
% python left.createOrReplaceTempView(“left_test_table”)right.createOrReplaceTempView(“right_test_table”)
%r庫(SparkR) SparkR .session() left <- sql("SELECT * FROM left_test_table") right <- sql("SELECT * FROM right_test_table")
上麵的代碼導致了重複的列。下麵的代碼不是。
%r head(drop(join(left, right, left$name == right$name), left$name))