pyspark 加入多个条件并删除两个重复的列
pyspark join multiple conditon and drop both duplicate column
我是 pandas 的 pyspark 新手。
在一个条件下加入并删除副本似乎在我这样做时完美地工作:
df1.join(df2, df1.col1 == df2.col1, how="left").drop(df2.col1)
但是,如果我想加入两列条件并删除两列加入的 df b.c 怎么办?它是重复的。
我试过:
df1.join(df2, [df1.col1 == df2.col1, df1.col2 == df2.col2, how="left").drop(df2.col1, df2.col2)
方法drop
只能使用单个Column
表达式或one/more 字符串列名来删除。这就是为什么它适用于 drop(df2.col1)
但在使用 drop(df2.col1, df2.col2)
.
时引发异常
以这两个数据帧为例:
df1 = spark.createDataFrame([(1, 1), (2, 2)], ["col1", "col2"])
df2 = spark.createDataFrame([(5, 3, "ok"), (2, 2, "ko")], ["col1", "col2", "status"])
您可以像这样删除重复的列:
- 使用列名列表作为连接条件
df1.join(df2, ["col1", "col2"], "left").show()
#+----+----+------+
#|col1|col2|status|
#+----+----+------+
#| 1| 1| null|
#| 2| 2| ko|
#+----+----+------+
- 使用
select
表达式
df1.join(df2, (df1["col1"] == df2["col1"]) & (df1["col2"] == df2["col2"]), "left")\
.select(
df1["*"],
*[df2[c] for c in df2.columns if c not in ["col1", "col2"]]
).show()
#+----+----+------+
#|col1|col2|status|
#+----+----+------+
#| 1| 1| null|
#| 2| 2| ko|
#+----+----+------+
我是 pandas 的 pyspark 新手。
在一个条件下加入并删除副本似乎在我这样做时完美地工作:
df1.join(df2, df1.col1 == df2.col1, how="left").drop(df2.col1)
但是,如果我想加入两列条件并删除两列加入的 df b.c 怎么办?它是重复的。
我试过:
df1.join(df2, [df1.col1 == df2.col1, df1.col2 == df2.col2, how="left").drop(df2.col1, df2.col2)
方法drop
只能使用单个Column
表达式或one/more 字符串列名来删除。这就是为什么它适用于 drop(df2.col1)
但在使用 drop(df2.col1, df2.col2)
.
以这两个数据帧为例:
df1 = spark.createDataFrame([(1, 1), (2, 2)], ["col1", "col2"])
df2 = spark.createDataFrame([(5, 3, "ok"), (2, 2, "ko")], ["col1", "col2", "status"])
您可以像这样删除重复的列:
- 使用列名列表作为连接条件
df1.join(df2, ["col1", "col2"], "left").show()
#+----+----+------+
#|col1|col2|status|
#+----+----+------+
#| 1| 1| null|
#| 2| 2| ko|
#+----+----+------+
- 使用
select
表达式
df1.join(df2, (df1["col1"] == df2["col1"]) & (df1["col2"] == df2["col2"]), "left")\
.select(
df1["*"],
*[df2[c] for c in df2.columns if c not in ["col1", "col2"]]
).show()
#+----+----+------+
#|col1|col2|status|
#+----+----+------+
#| 1| 1| null|
#| 2| 2| ko|
#+----+----+------+