Это не совсем элегантно, но вы можете создавать новые версии в нижнем регистре этих столбцов исключительно для соединения.
import pyspark.sql.functions as F
df1_l = df1 \
.withColumn("col1_l", F.lower(df1.col1)) \
.withColumn("col2_l", F.lower(df1.col2)) \
.withColumn("col3_l"), F.lower(df1.col3)
df2_l = df2 \
.withColumn("col1_l", F.lower(df2.col1)) \
.withColumn("col2_l", F.lower(df2.col2)) \
.withColumn("col3_l"), F.lower(df2.col3)
df3 = df1_l.join(df2_l,
["col1_l", "col2_l", "col3_l"],
"left_outer")
И вы также можете попробовать сделать это же преобразование в предикате, например .:
df3 = df1.join(df2,
(F.lower(df1.col1) == F.lower(df2.col1))
& (F.lower(df1.col2) == F.lower(df2.col2))
& (F.lower(df1.col3) == F.lower(df2.col3))
"left_outer")