Последовательная обработка файла в SPARK / SCALA для Ngrams

Я задаю этот вопрос о Ngrams. В отношении файлов и обработки параллельно и необходимости обработки данных последовательно для ngrams.

Если я забываю о физическом разделении файла и забываю об обработке карт для ngrams, которые, очевидно, пропустят некоторые ngrams, то, если я обрабатываю Ngram для небольшого файла локально, я отмечаю, что я всегда получаю ngrams в последовательном порядке файла, intra file. Это озадачивает меня, в отличие от суммирования, которое не имеет реальных ограничений на параллельные части, в идеале здесь есть такое рассмотрение.

Файл, который имел sc.распараллелить (fn,n), примененное к нему, с i Теперь говорится, что SPARK работает параллельно, так что гарантирует этот эффект, который я, кажется, вижу на небольших файлах? Я не могу видеть из документации. Это то, что flatmap всегда будет возвращать данные в последовательном порядке, или размер файла, использование карты?

Это, наверное, очень простой вопрос. Спасибо заранее.

PS: Я предполагаю, что обработка файла foreach основана на подстановочном sc.wholeTexTFiles происходит параллельно. Пожалуйста, не говорите мне, что это не так. Я видел несколько разных мнений по этому поводу.

1 ответ

  1. Мы используем скольжение для ngrams.

    Затем из Hortonworks:

    sliding() отслеживает индекс разбиения, который в данном случае соответствует порядку униграмм.

     Compare rdd.mapPartitionsWithIndex { (i, p) => p.map { e => (i, e) } }.collect() and rdd.sliding(2).mapPartitionsWithIndex { (i, p) => p.map { e => (i, e) } }.collect() to help with the intuition.