我有一个pyspark代码,它在3列上连接两个DF:
final_df = spark_company_df
.join(
spark_geo_df,
(spark_company_df.column1 == spark_geo_df.column1) &
(spark_company_df.column2 == spark_geo_df.column2) &
(spark_company_df.column3 == spark_geo_df.column3),
"left_outer")
.select(
spark_geo_df.column1,
spark_geo_df.column2,
spark_geo_df.column3)
spark_company_df.column3可以为null,其他两个不能,所以在这些情况下,所有3列在结果DF中都是null。如果3rd为null,则连接2列,如果它不是null,则连接3列,有什么简单的方法吗?某种条件连接。我知道我可以用额外的连接来做,但也许有更好的方法来做?
预期最终DF:
-----------------+--------------------+-------------+-
|column1 | column2 | column3|
+-----------------+--------------------+-------------+
| LA| CA| US|
| LA| CA| US|
| SF| CA| null|
+-----------------+--------------------+-------------+
但得到:
-----------------+--------------------+-------------+-
|column1 | column2 | column3|
+-----------------+--------------------+-------------+
| LA| CA| US|
| LA| CA| US|
| null| null| null|
+-----------------+--------------------+-------------+
1条答案
按热度按时间yhqotfr81#
您可以使用pyspark.sql.Column.eqNullSafe来实现这一点,
你的代码应该是这样的