2014-11-29 2 views
2

Я проверил определение API distinct() в documentation, он говоритКак использовать API-интерфейс Spark()?

Возвращает новый набор данных, который содержит различные элементы исходного набора данных.

Но каково правило для разделения исходного набора данных?

Предположим, что мой набор данных содержит 100 строк, и моя программа будет обрабатывать его по строкам, если я использую отдельный(), чтобы разделить мой набор данных, скажем 300 задач, будет ли результат отличаться от разбиения 100 задач?

ответ

1

Distinct()

Вы не можете использовать distinct() разделить свой набор данных, он просто удаляет дубликаты, поэтому вы получите такое же количество или меньше элементов, как результат. Вы можете установить numTasks, чтобы изменить level of parallelism.

Ресурсы кластера могут быть недостаточно использованы, если количество параллельных задач, используемых на любом этапе вычисления, недостаточно велико.

Пример

набор данных ((1), (2), (2), (3)) становится ((1), (2), (3)).

Расщепление элементы

Чтобы разделить элемент, например, разделив строку в текстовом файле в слова, вы могли бы использовать flatMap.

Аналогично карте, но каждый элемент ввода может быть сопоставлен с 0 или более выходными элементами (поэтому func должен возвращать Seq, а не один элемент).

Посмотрите на word count example.

+0

Благодарим вас за ответ. Тогда что мне делать, чтобы разбить набор данных на приложение Spark и убедиться, что моя программа может работать одновременно? – fanhk

+0

Кстати, в чем смысл параметра distinct()? кажется, называется «numPartition» – fanhk

+0

@fanhk: для использования Spark вам понадобится [RDD] (http://spark.apache.org/docs/latest/programming-guide.html#resilient-distributed-datasets-rdds) и при использовании RDD вам не нужно самостоятельно настраивать параллелизм, он встроен. Я добавил ответы на другие вопросы в своем посте. –

Смежные вопросы