You can simply use ParallelMap
:
ParallelMap[{#[[1]], #[[2]], EditDistance[#[[1]] // Last, #[[2]] // Last]} &, data]
Here is my sample test:
names = {"Sophia", "Emma", "Olivia", "Noah", "Liam", "Jacob", "Mason",
"Isabella", "William", "Ethan", "Michael", "Ava", "Alexander",
"Jayden", "Daniel", "Elijah", "Aiden", "James", "Benjamin", "Matthew"}
(*5 million names*)
realtest = RandomChoice[names, 5000000];
(*formatting function*)
f = Partition[#, 2, 2, 1] &;
data = f@f@realtest;
(*timing done on my 4 core i7-3770 + 4 core xeon 3.0 GHZ = 8 core environment*)
AbsoluteTiming[
plotData =
ParallelMap[{#[[1]], #[[2]],
EditDistance[#[[1]] // Last, #[[2]] // Last]} &, testData];]
(* {70.584037, Null} *)
Total time elapsed including I/O is 70 seconds.