Como comparar os cabeçalhos do df com outros cabeçalhos df usando o Fuzzy Matching no pyspark?

Criei 3 quadros de dados executando o seguinte código. sample.csv

id|code|name|Lname|mname
2|AA|BB|CC|DD|

sample1.csv

id|code|name|Lname|mname
1|A|B|C|D|

sample2.csv

id1|code1|name1|Lnam|mnam
3|AAA|BBB|CCC|DDD|

Comparei os cabeçalhos dos quadros de dados usando a lógica fuzzy se a correspondência média de todos os arquivos da coluna 2 do cabeçalho (amostra1, amostra2) for de 85%, então tenho que imprimir os dois arquivos iguai

example :
  sample1.csv vs sample2.csv  

+---------+--------+-----+
|f1_lab   |  f2_lab|score|
+---------+--------+-----+
| id      |   id1  |  80 |
| code    |  code1 |  89 |
| name    |   name1|  89 |
| Lname   |   Lnam |  89 |
| mname   |   mnam |  89 | 
+---------+--------+-----+

my saída final será a média das pontuações ex:80+89+89+89+89/5=87.2 (pontuação de avenue).

se a pontuação média estiver acima de 80, eu tenho que imprimir uma saída comosample1 and sample2 matched ,.

like que eu tenho que comparar todos os cabeçalhos de arquivo com outro cabeçalho de arquivo. Preciso identificar todos os arquivos correspondentes.

pode me ajudar nisso.

favor encontrar o código abaix

from pyspark.sql import SQLContext,SparkSession
spark = SparkSession.builder.appName("ALS").getOrCreate()
sc = spark.sparkContext
sqlContext = SQLContext(sc)
df = sqlContext.read.format('com.databricks.spark.csv').options(header='True', inferschema='false').option("delimiter", "|").load('C:/Users/test/Desktop/sample1.csv')
df1 = sqlContext.read.format('com.databricks.spark.csv').options(header='True', inferschema='false').option("delimiter", "|").load('C:/Users/test/Desktop/sample2.csv')
df2 = sqlContext.read.format('com.databricks.spark.csv').options(header='True', inferschema='false').option("delimiter", "|").load('C:/Users/test/Desktop/sample3.csv')
lab= [col_name for col_name in df.columns]
lab1=[col_name1 for col_name1 in df1.columns]
lab2=[col_name1 for col_name1 in df2.columns]
lab1head=sc.parallelize(lab).zipWithIndex()
a = spark.createDataFrame(lab1head,['label1', "Index"])
lab1head=sc.parallelize(lab1).zipWithIndex()
a1 = spark.createDataFrame(lab1head,['label2', "Index"])
lab2head=sc.parallelize(lab1).zipWithIndex()
a1 = spark.createDataFrame(lab2head,['label3', "Index"])

from fuzzywuzzy import fuzz
def match_name(name, list_names, min_score=0):
    max_score = -1
    # Returning empty name for no match as well
    max_name = ""
    # Iternating over all names in the other
    for name2 in list_names:
        #Finding fuzzy match score
        score = fuzz.ratio(name, name2)
        # Checking if we are above our threshold and have a better score
        if (score > min_score) & (score > max_score):
            max_name = name2
            max_score = score
    return (max_name, max_score)

dict_list = []
for name in a.label1:
    # Use our method to find best match, we can set a threshold here
    match = match_name(name, a1.label2, 75)
    dict_ = {}
    dict_.update({"labhead" : name})
    dict_.update({"labhead1" : match[0]})
    dict_.update({"score" : match[1]})
    dict_list.append(dict_)

questionAnswers(0)

yourAnswerToTheQuestion