Dataframe 带空条件的Pypark连接
我正试图根据“年份”和“发票”列连接两个pyspark数据帧,如下所示。但如果df1中缺少“Year”,那么我需要仅基于“invoice”加入 df1: df2: 预期产出: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
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)