Статьи

Использование Python с Apache Spark

Apache Spark потрясающий. Python потрясающий. Этот пост покажет вам, как использовать ваш любимый язык программирования для быстрой обработки больших наборов данных.

Почему питон?

Python стал одним из основных языков программирования, присоединившись к пантеону основных языков, таких как C, C ++ и HTML. Почему он стал таким популярным? Потому что Гвидо ван Россум разработал его в качестве учебного пособия, облегчающего изучение Python.

Но это больше, чем просто. Это также очень полезно из-за стандартной библиотеки «батарейки включены». Python поставляется с несколькими модулями для взаимодействия с операционной системой, поиска текста с помощью регулярных выражений, доступа к Интернету и всего, о чем вы только могли подумать. Вы можете скачать намного больше или свернуть свои собственные, взаимодействуя с библиотекой C.

Поскольку это динамический интерпретируемый язык, вам не нужно объявлять переменные или иметь дело с ошибками управления памятью, как вы делаете с C.

По этой причине Python привлекает как опытных программистов, так и начинающих. Google использует это широко.

Хотя вы можете использовать Scala, на которой построен Spark, есть веские причины использовать Python. Вероятно, больше людей будут знакомы с Python, чем со Scala, что выровняет кривую обучения.

На самом деле установка Spark выходит за рамки этого руководства. Вы можете узнать, как установить его на свой компьютер в новой интерактивной книге Apache Spark здесь (если вы еще не установили Spark). В этом посте также предполагается, что на вашей машине установлен Python. Python является стандартным для большинства дистрибутивов Linux / Unix и Mac OS X. Вы можете легко установить Python со своей домашней страницы, если вы работаете в Windows или просто хотите установить более свежую версию.

Вы можете запустить интерактивную оболочку Python для Spark с помощью команды ./bin/pyspark из каталога Spark.

Эквивалент «Привет, мир» в Spark — это количество слов. Здесь используется Spark на Python, заимствованный с домашней страницы Apache Spark :

1
2
3
4
text_file = spark.textFile("hdfs://...")
text_file.flatMap(lambda line: line.split())
    .map(lambda word: (word, 1))
    .reduceByKey(lambda a, b: a+b)

Это создает объект text_file, разбивает его на строки, подсчитывает все слова в строке и добавляет их обратно вместе.

Трансформации

Определяющей особенностью Apache Spark являются его устойчивые распределенные наборы данных, или RDD. Эти RDD представляют данные в виде неизменных наборов для всех узлов в кластере Spark. Операции состоят из преобразований, которые связаны друг с другом. Это означает, что все операции с вашими данными являются неразрушающими, что позволяет системе восстанавливаться после сбоев.

Преобразования могут применяться к СДР, таким образом генерируя больше СДР. Одним из наиболее популярных доступных преобразований является filter (), которое применяет функцию в качестве аргумента ко всем значениям в ваших данных и возвращает только те значения, которые возвращают true.

Чтобы преобразовать внешний текстовый файл в RDD, просто используйте команду MyFile = sc.TextFile(“data.txt”) где MyFile — это имя, которое вы хотите использовать, а «data.txt» — имя вашего файла. map () похожа, но применяет значения к каждому значению. flatMap (), замеченный в предыдущем примере, делает то же самое, но возвращает Seq вместо значения.

Вот некоторые другие преобразования:

  • reduByKey () принимает функцию в качестве аргумента и объединяет данные, такие как сложение значений вместе.
  • groupByKey () принимает значения и превращает их в итерируемый объект.
  • different () удаляет дубликаты из RDD.

Использование коллекций

Вы можете использовать действие collect (), чтобы получить все данные в СДР и превратить их в массив. Это позволяет вам применить действие к вашим данным.

Вы также можете распараллелить массив для использования в кластере Spark.

1
2
data = [1, 2, 3, 4, 5]
distData = sc.parallelize(data)

действия

В то время как преобразования создают новые RDD, действия дают какой-то результат. Collect () и sc.parallelize () — два примера действий, которые мы видели.

Вот некоторые общие действия:

  • count() подсчитывает количество элементов в СДР.
  • take() выбирает первые n элементов в качестве аргумента из RDD.
  • foreach() применяет функцию к каждому элементу в СДР.
  • saveAsTextFile() сохраняет СДР в текстовый файл по указанному пути.

Вывод

Python — это мощный язык программирования, с которым легко программировать. В сочетании с Apache Spark у вас есть мощный и простой способ обработки больших данных в режиме реального времени или с помощью сценариев. Дистрибутив MapR дает вам все необходимое для обработки больших данных на вашем любимом языке. Документация Apache Spark даст вам больше информации о том, как это сделать.

Ссылка: Использование Python с Apache Spark от нашего партнера JCG Джима Скотта в блоге Mapr .