Я пытаюсь объединить 2 фрейма данных pyspark по 2 столбцам, фреймы данных:
df1 = pd.DataFrame()
df1["ID"] = ["1","1","2","5"]
df1["A"] = ["100","100","300","450"]
df1["Date"] = [2015,2019,2002,2003]
df1["Date2"] = [2000,2000,2000,2000]
df1 = sqlContext.createDataFrame(df1)
df2 = pd.DataFrame()
df2["ID"] = ["1","1","5","9"]
df2["A"] = ["100","100","450","250"]
df2["Z"] = [65,65,65,65]
df2 = sqlContext.createDataFrame(df2)
df1:
+---+---+----+-----+
| ID| A|Date|Date2|
+---+---+----+-----+
| 1|100|2015| 2000|
| 1|100|2019| 2000|
| 2|300|2002| 2000|
| 5|450|2003| 2000|
+---+---+----+-----+
df2:
+---+---+---+
| ID| A| Z|
+---+---+---+
| 1|100| 65|
| 1|100| 65|
| 5|450| 65|
| 9|250| 65|
+---+---+---+
Я хочу получить следующий фрейм данных:
+---+---+----+-----+----+
| ID| A|Date|Date2| Z|
+---+---+----+-----+----+
| 9|250|null| null| 65|
| 5|450|2003| 2000| 65|
| 1|100|2015| 2000| 65|
| 1|100|2019| 2000| 65|
| 2|300|2002| 2000|null|
+---+---+----+-----+----+
Я пытался:
new = df1.join(df2, ["ID","A"],how='full' )
Что мне достанется:
+---+---+----+-----+----+
| ID| A|Date|Date2| Z|
+---+---+----+-----+----+
| 9|250|null| null| 65|
| 5|450|2003| 2000| 65|
| 2|300|2002| 2000|null|
| 1|100|2015| 2000| 65|
| 1|100|2015| 2000| 65|
| 1|100|2019| 2000| 65|
| 1|100|2019| 2000| 65|
+---+---+----+-----+----+
Затем я удалил дубликаты, используя:
cols_join = new.columns
cols_join.remove("ID")
cols_join.remove("A")
new.dropDuplicates(subset=cols_join).show()
+---+---+----+-----+----+
| ID| A|Date|Date2| Z|
+---+---+----+-----+----+
| 9|250|null| null| 65|
| 5|450|2003| 2000| 65|
| 1|100|2015| 2000| 65|
| 1|100|2019| 2000| 65|
| 2|300|2002| 2000|null|
+---+---+----+-----+----+
Есть ли лучший способ сделать это?
Я пробовал другие объединения (левый, внутренний и т. Д.), Но не получил желаемый результат
Кроме того, есть ли лучший способ удаления дублированных строк?