У меня есть фрейм данных PySpark (D1) с 30+ миллионами строк, который выглядит следующим образом:
+-----+----+-----+
| _id| id1| id2|
+-----+----+-----+
|10891|2574|34228|
|99164| 74|33547|
+-----+----+-----+
, затем у меня есть две таблицы (T1 и T2) (каждая 10 миллионов записей) с идентичной схемойкоторый выглядит следующим образом:
+---+--------------------+--------------------+
|id1| attr1 .| attr2|
+---+--------------------+--------------------+
| 0|attr1 - value 1 .|attr2-value1 . |
| 1|attr1 - value1 . .|attr2-value2 |
+---+--------------------+--------------------+
Я хочу провести токенизацию на уровне слов или, возможно, использовать NGram, а затем применить функцию X, чтобы получить оценку сходства.
Это то, что я сейчас делаюЯ использую mapPartition на фрейме данных D1, и в каждом разделе я получаю записи T1 и T2.Затем для каждой строки (итератора) я просматриваю записи T1 и T2, разбиваю их по токенам и затем применяю функцию X. Это явно не лучшее решение.
Я хотел бы либо разумно разделить D1, либо я хотел бы разбить токены и прочитать T1 и T2 один раз, а затем использовать их для каждого mapPartition.Я новичок в PySpark и пытаюсь понять, как я могу оптимизировать это.На практике D1, T1 и T2 могут исчисляться миллионами, и поэтому возможность присоединения не вполне соответствует моим потребностям.Любая помощь будет оценена.Спасибо!