Одним из способов может быть использование функции substring
на df2
, чтобы сохранить только последние 10 цифр, чтобы получить ту же длину, что и в df1
:
import pyspark.sql.functions as F
ddf2.select(F.substring('mobile_no', 3, 10).alias('mobile_no'),'gender').show()
+----------+------+
| mobile_no|gender|
+----------+------+
|2222222222| M|
|4444444444| M|
|9999999999| F|
|5555555555| M|
|8888888888| F|
+----------+------+
Тогда вам просто нужно сделать внутренний join
, чтобы получить ожидаемый результат:
common_cust = df1.select('mobile_no', 'value')\
.join( df2.select(F.substring('mobile_no', 3, 10).alias('mobile_no'),'gender'),
on=['mobile_no'], how='inner')
common_cust.show()
+----------+-----+------+
| mobile_no|value|gender|
+----------+-----+------+
|2222222222| 0.54| M|
|4444444444| 0.22| M|
+----------+-----+------+
Если вы хотите использовать spark.sql
, я думаю, вы можете сделать это так:
common_cust = spark.sql("""select df1.mobile_no, df1.value, df2.gender
from df1
inner join df2
on df1.mobile_no = substring(df2.mobile_no, 3, 10)""")