Сравнение строк с эффективным использованием памяти с блокировкой в R
У меня проблема с связью записей с очень большими наборами данных (2000 записей в A-файле, ~70 000 000 записей в B-файле) и я хочу выполнить сопоставление на основе расстояний с помощью алгоритма jarow-winkler в R. Оба файла являются data.tables заполнены строками.
Для разработки моей методологии я использовал подвыборки и пакет "RecordLinkage". Преимущество пакета в том, что я могу использовать блокировку перед фактическим сравнением строк. R-команды для этого
compare.linkage(dataset1, dataset2, strcmp, blockfld)
RLBigDataLinkage(dataset1, dataset2, strcmp, blockfld)
Большим недостатком этого является то, что создается поле сравнения для всех записей в A-файле и всех записей в B-файле, что требует слишком много памяти. Есть ли способ сделать блокировку и сохранить только n пар записей для каждой записи в A-файле с лучшими оценками Яроу-Винклера?
Чтобы сделать вещи более понятными, я приведу короткий пример (я не использовал блокировку для упрощения):
library(RecordLinkage)
a <- as.matrix(c("ab", "ac", "ad", "aa"))
b <- as.matrix(c("bb", "bc", "bd", "bb"))
test <- compare.linkage(a, b)
str(test$pairs)
nrow(test$pairs)
Моя проблема не в том, что копии "a" и "b" включены в "test", а в длину "test$pair". В приведенном выше примере "test$pair" хранит результаты сравнения для всех возможных комбинаций записей. Таким образом, в "test$pair" есть 4*4=16 записей. То, что я хотел бы сделать, это сохранить только n комбинаций для каждого элемента в a-файле с лучшим показателем сравнения. Поэтому, когда я устанавливаю n=2, я получаю только 4(записи из a-файла) * 2(пары записей с лучшими показателями сравнения) = 8
Это различие может быть небольшим в приведенном выше примере, но имеет решающее значение для больших наборов данных.
Заранее спасибо!