Мой набор данных очень простой. Он хранится в файле CSV и содержит два столбца: Имя1 и Имя2. Однако я хочу не просто сравнить два значения в одной строке, а сравнить каждое Имя1 со всеми доступными значениями Имя2.
Вот как выглядит мой код,
Код: Выделить всё
from pyspark.sql import functions as f
from fuzzywuzzy import fuzz
from pyspark.sql.types import StringType
# create a simple function that performs fuzzy matching on two strings
def match_string(s1, s2):
return fuzz.token_sort_ratio(s1, s2)
# convert the function into a UDF
MatchUDF = f.udf(match_string, StringType())
# separate the two Name columns into individual DataFrames
df1 = raw_df.select('Name1')
df2 = raw_df.select('Name2')
# perform a CROSS JOIN on the two DataFrames
# CAN THIS BE AVOIDED?
df = df1.crossJoin(df2)
# use the UDF from before to calculate a similarity score for each combination
df = df.withColumn("similarity_score", MatchUDF(f.col("Name1"), f.col("Name2")))
Что меня беспокоит, так это КРЕСТОВОЕ СОЕДИНЕНИЕ. Это экспоненциально увеличивает количество имеющихся у меня точек данных. Можно ли этого избежать?
Я также открыт для совершенно других подходов, которые позволят выполнить то, что мне нужно, более оптимизированным образом.
Подробнее здесь: https://stackoverflow.com/questions/760 ... in-pyspark
Мобильная версия