Page tree
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 7 Next »

Материалы

Документация Spark: https://spark.apache.org/docs/2.3.0/sql-programming-guide.html

Форматы данных:

  1. Формат plain text storage - text, csv, tsv, с фиксированной длиной и другие текстовые форматы
  2. Формат sequence files: https://wiki.apache.org/hadoop/SequenceFile
  3. Формат данных parquet: https://parquet.apache.org/documentation/latest/
  4. Формат данных orc: https://orc.apache.org/specification/ORCv1/
  5. Формат данных avro: http://avro.apache.org/docs/current/spec.html

Проект: lession13.zip


Работа с Apache Spark

Установка

Дистрибутив Apache Spark можно скачать с официальной страницы: https://spark.apache.org/downloads.html.

Мы будем работать с версией 2.3.0 скомпилированной под Hadoop 2.7.

Нужно скачать дистрибутив и распаковать в директорию установки.

Работа с REPL (read-eval-print loop)

Запуск

В директории $SPARK_HOME/bin есть файл запуска Spark REPL

  1. spark-shell.cmd для запуска на ОС Windows
  2. spark-shell для запуска на *nix платформах


Особенности работы на Windows платформах

При запуска на Windows возникает ошибка 

java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

В принципе это не помешает запуска, однако, чтобы эмулировать работу с HDFS можно скачать эту утилиту и указать путь к ней.

WinUtils можно скачать по ссылке https://github.com/steveloughran/winutils/tree/master/hadoop-2.7.1

При запуске spark-shell.cmd должна быть установлена переменная окружения HADOOP_HOME на путь до директории где в папке bin лежат файлы winutils

set HADOOP_HOME=D:\Programs\Spark\hadoop\

Зависимости в REPL

С помощью настройки --jar можно передать список jar-файлов,нужных при работе с REPL. Например:

%SPARK_HOME%\bin\spark-shell --jar park-introduction-1.0.0-SNAPSHOT.jar


Примеры


Создание RDD
scala> val rdd = sc.parallelize(1 to 100)
rdd: org.apache.spark.rdd.RDD[Int] = ParallelCollectionRDD[0] at parallelize at <console>:24


Создание DataFrame из RDD
scala> val df = rdd.toDF
df: org.apache.spark.sql.DataFrame = [value: int]

scala> df.printSchema
root
 |-- value: integer (nullable = false)


scala> df.show(2)
+-----+
|value|
+-----+
|    1|
|    2|
+-----+
only showing top 2 rows


Работа с DataFrame и GlobalView
scala> case class Person(id: Int, name: String)
defined class Person

scala> val persons = Seq(Person(1, "Ivan"), Person(2, "Petrov"), Person(3, "Sidorov")).toDF
persons: org.apache.spark.sql.DataFrame = [id: int, name: string]

scala> persons.select("name").show
+-------+
|   name|
+-------+
|   Ivan|
| Petrov|
|Sidorov|
+-------+


scala> persons.createGlobalTempView("persons")

scala> spark.sql("select id from global_temp.persons").show
+---+
| id|
+---+
|  1|
|  2|
|  3|
+---+


Минимальный проект на Spark

Загрузка, сохранение данных в разных форматах



  • No labels