Материалы

Документация 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

Код

object Minimal {

  def main(args: Array[String]) {
    val spark = SparkSession.builder.appName("Spark Application").getOrCreate()
    import spark.implicits._
    
    (1 to 10).toDF.show
    
    spark.stop()
  }
}

В зависимости проекта должны быть включены библиотеки spark-core и spark-sql

Запуск


set HADOOP_HOME=<path to bin/winutils.exe>
set SPARK_HOME=<path to spark home>
set MAIN_CLASS=Minimal

%SPARK_HOME%\bin\spark-submit --class %MAIN_CLASS% --master local[2] your_jar.jar


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



  • Нет меток