Dataframe 带空条件的Pypark连接

Dataframe 带空条件的Pypark连接,dataframe,apache-spark,join,pyspark,apache-spark-sql,Dataframe,Apache Spark,Join,Pyspark,Apache Spark Sql,我正试图根据“年份”和“发票”列连接两个pyspark数据帧,如下所示。但如果df1中缺少“Year”,那么我需要仅基于“invoice”加入 df1: df2: 预期产出: Year invoice Status Item 2020 262 YES bag 2016 216 NO headphone 2014 175 YES phone 2013 198 NO

我正试图根据“年份”和“发票”列连接两个pyspark数据帧,如下所示。但如果df1中缺少“Year”,那么我需要仅基于“invoice”加入

df1:

df2:

预期产出:

Year    invoice    Status   Item
2020    262        YES      bag
2016    216        NO       headphone
2014    175        YES      phone
2013    198        NO       ribbon
2019    252        YES      ball
我可以按如下方式连接df1和df2(仅基于“年份和发票”列)。如果df1中缺少年份,我需要添加仅基于发票连接两列的逻辑

df_results = df1.join(df2, on=['Year', 'invoice'], how='left') \
                .drop(df2.Year) \
                .drop(df2.invoice)

如果df1中没有“年”,请告诉我如何加入,并且数据帧应仅基于“发票”加入。谢谢。

我没有您的代码来测试此操作,但我会尝试向加入操作添加一个条件:

cond = ((df1.Year == df2.Year) | df1.Year.isNull()) & (df1.invoice == df2.invoice)
df_results = df1.join(df2, on=cond, how='left') \
                .drop(df2.Year) \
                .drop(df2.invoice)

感谢@mck奇怪的是,df1.Year==df2.Year对我不起作用。它们是整数类型。当我手动检查时,两列显示的是同一年。加入后,我得到“Status”和“Item”列的空值。但这些值存在于原始df1中。
df_results = df1.join(df2, on=['Year', 'invoice'], how='left') \
                .drop(df2.Year) \
                .drop(df2.invoice)
cond = ((df1.Year == df2.Year) | df1.Year.isNull()) & (df1.invoice == df2.invoice)
df_results = df1.join(df2, on=cond, how='left') \
                .drop(df2.Year) \
                .drop(df2.invoice)