Я хочу выполнить соединение на основе расстояния Левенштейна.
У меня есть 2 кадра данных:
Данные: небольшой фрейм данных со 130 000 строк.
Сирена: большой фрейм данных, представляющий таблицу stockunitelegale базы данных SIREN с 20 миллионами строк.
Я попытался передать небольшой фрейм данных и выполнить соединение с большим набором данных. Задание Spark всегда зависает на последних трех задачах присоединения...
data=broadcast(data)
df=siren.join(spk, 1-(fn.levenshtein(data["description_nom"],
siren["denominationUniteLegale"])/ fn.greatest(fn.length(data["description_nom"]),
fn.length(siren["denominationUniteLegale"])))>0.7)
df.write.csv("join_siren.csv")
Я также пытался увеличить количество исполнителей, количество ядер и выделенную память, но у меня было такое же поведение с точки зрения обработки.
--num-executors 20 --conf "spark.executor.memory=12g" --conf "spark.executor.cores=15" --conf "spark.sql.shuffle.partitions=1000" --conf "spark.default.parallelism=1000" --conf "spark.driver.maxResultSize=8g" --conf "spark.sql.autoBroadcastJoinThreshold=20485760" --conf "spark.network.timeout=10000000"
У вас есть какие-либо решения, пожалуйста, для такого рода проблемы?
joined_df =df1.join(df2,levenshtein(df1['description'], df2['description']))
и сохраните. Затем в новом скрипте выполните другие операции, используя умное сокращение карты или UDF. - person Leo103   schedule 12.02.2021