Как я могу оптимизировать код, просто прочитав таблицы один раз в следующем коде PySpark? - PullRequest
0 голосов
/ 23 сентября 2019

У меня есть фрейм данных 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 могут исчисляться миллионами, и поэтому возможность присоединения не вполне соответствует моим потребностям.Любая помощь будет оценена.Спасибо!

...