Как я могу реализовать zipWithIndex как Spark в Apache Beam? - PullRequest
0 голосов
/ 12 декабря 2018
Pcollection<String> p1 = {"a","b","c"}

PCollection< KV<Integer,String> > p2 = p1.apply("some operation ") 
//{(1,"a"),(2,"b"),(3,"c")}

Мне нужно сделать его масштабируемым для больших файлов, таких как Apache Spark, таким образом, чтобы он работал следующим образом:

sc.textFile("./filename").zipWithIndex

Моя цель - сохранить порядок между строками в большом файле, назначая номера строкв масштабируемом виде.

Как получить результат по Apache Beam?

Некоторые похожие посты: zipWithIndex на Apache Flink

Ранжирование элементов коллекции

Ответы [ 2 ]

0 голосов
/ 14 декабря 2018

(копирование моего ответа от user@beam.apache.org)

Это интересно.Так что, если я понимаю ваш алгоритм, это будет что-то вроде (псевдокод):

A = ReadWithShardedLineNumbers(myFile) : output K<ShardOffset+LocalLineNumber>, V<Data>
B = A.ExtractShardOffsetKeys() : output K<ShardOffset>, V<LocalLineNumber>
C = B.PerKeySum() : output K<ShardOffset>, V<ShardTotalLines>
D = C.GlobalSortAndPrefixSum() : output K<ShardOffset> V<ShardLineNumberOffset>
E = [A,D].JoinAndCalculateGlobalLineNumbers() : output V<GlobalLineNumber+Data>

Это делает пару предположений:

  1. ReadWithShardedLineNumbers: источники могут выводить смещение их осколкаи смещения упорядочены глобально
  2. GlobalSortAndPrefixSum: итоговые значения всех прочитанных осколков могут поместиться в памяти для выполнения общей сортировки

Предположение № 2 не будет выполняться для всехРазмеры данных и варьируются в зависимости от бегуна в зависимости от степени детализации чтения.Но это представляется возможным для некоторого практического подмножества размеров файлов.

Кроме того, я считаю, что приведенный выше псевдокод представлен в Beam и не потребует SplittableDoFn.

0 голосов
/ 12 декабря 2018

Нет встроенного способа сделать это.PCollections в Beam неупорядочены, потенциально неограничены и обрабатываются параллельно на нескольких рабочих.Тот факт, что PCollection исходит из источника с известным порядком, не может наблюдаться непосредственно в модели луча.Я думаю, что более простым способом было бы предварительно обработать файл, прежде чем он будет использован в конвейере Beam.

...