Download - Análisis de datos con Apache Spark
![Page 2: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/2.jpg)
Referencias
▪ Using Apache Spark. Pat McDonough – Databricks
▪ Spark in the Hadoop Ecosystem. Eric Baldeschwieler
![Page 3: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/3.jpg)
Apache Spark
spark.incubator.apache.org
github.com/ Apache / incubator-
spark
![Page 4: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/4.jpg)
Apache Spark
![Page 5: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/5.jpg)
Introducción a Spark
![Page 6: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/6.jpg)
¿Qué es Spark?
▪ No es una versión modificada de Hadoop
▪ Independiente, rápido, MapReduce
▪ Almacenamiento en memoria para consultas iterativas muy rápidas
▪ Hasta 40x más rápido que Hadoop
▪ Compatible con el API Hadoop con respecto al almacenamiento
▪ Se puede leer / escribir en cualquier sistema soportado por Hadoop, incluyendo HDFS, HBase,SequenceFiles,etc
![Page 7: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/7.jpg)
Eficiente
• Almacenamiento en memoria
Utilizable
• API en Java, Scala, Python
• Shell Interactivo
Qué es Spark?Fast and Expressive Cluster Computing System
Compatible con Apache Hadoop
![Page 8: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/8.jpg)
Evolución de Spark
• 2008 - Yahoo! equipo de Hadoop inicia colaboración con laboratorio de Berkeley Amp / Rad
• 2009 - Ejemplo de Spark construido para Nexus -> Mesos
• 2011 - "Spark está 2 años por delante de cualquier cosa en Google"
• 2012 - Yahoo! Trabaja con Spark / Shark
• Hoy - Muchas historias de éxito
![Page 9: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/9.jpg)
Usuarios Spark
![Page 10: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/10.jpg)
Actualizaciones Spark Hadoop
• Hardware ha mejorardo desde que Hadoop comenzó:
• Gran cantidad de RAM, redes más rápidas (10 Gb +)
• Ancho de banda de los discos no se manteniene al día
• MapReduce es incómodo para las cargas de trabajo:
![Page 11: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/11.jpg)
Spark, "lengua franca?"
• Soporte para muchas técnicas de desarrollo
• SQL, Streaming, Graph & in memory, MapReduce
• Escriba "UDF" una vez y utilizar en todos los contextos
• Pequeño, sencillo y elegante API
• Fácil de aprender y utilizar; expresivo y extensible
• Retiene ventajas de MapReduce (tolerancia a fallos ...)
![Page 12: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/12.jpg)
Conceptos
• Colecciones de objetos se propagan en un
cluster, almacenada en RAM o en Disco
• Construido a través de
transformaciones paralelas
• Automáticamente reconstruido en caso de falla
• Transformations (e.g.
map, filter, groupBy)
• Acciones
(e.g. count, collect, save)
Escribir programas en términos de transformaciones en
conjuntos de datos distribuido
Resilient Distributed Datasets Operationes
![Page 13: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/13.jpg)
Intercambio de Datos en MapReduce
iter. 1 iter. 2 . . .
Entrada
HDFSleer
HDFSescribir
HDFSleer
HDFSescribir
Entrada
consulta 1
consulta 2
consulta 3
resultado 1
resultado 2
número 3
. . .
HDFSleer
Lento debido a la replicación, la serialización, y el disco IO
![Page 14: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/14.jpg)
iter. 1 iter. 2 . . .
Entrada
Intercambio de Datos en Spark
Repartidomemoria
Entrada
consulta 1
pregunta 2
consulta 3
. . .
una veztratamiento
10-100× más rápido que la red y el disco
![Page 15: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/15.jpg)
Prueba de rendimiento de SortHadoop MR
Record (2013)Spark
Record (2014)
Data Size 102.5 TB 100 TB
Elapsed Time 72 mins 23 mins
# Nodes 2100 206
# Cores 50400 physical 6592 virtualized
Cluster disk throughput
3150 GB/s(est.)
618 GB/s
Networkdedicated data center, 10Gbps
virtualized (EC2) 10Gbps network
Sort rate 1.42 TB/min 4.27 TB/min
Sort rate/node 0.67 GB/min 20.7 GB/min
Sort benchmark, Daytona Gray: sort of 100 TB of data (1 trillion records)
http://databricks.com/blog/2014/11/05/spark-officially-sets-a-new-record-in-large-scale-
sorting.html
Spark, 3x
más rápido
1/10 de
nodos
![Page 16: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/16.jpg)
Combina streaming y análisiscomplejos
![Page 17: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/17.jpg)
From single machines to distributed computingEscalar Spark en Cluster
![Page 18: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/18.jpg)
Spark clusters in Azure HDInsightSpark en Azure y Blob Storage
![Page 19: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/19.jpg)
Fuentes de datos
![Page 20: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/20.jpg)
Spark con HDFS
![Page 21: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/21.jpg)
Stack para aplicaciones
![Page 22: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/22.jpg)
Spark dentro de Hortonworks
![Page 23: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/23.jpg)
Interacción con Yarn
![Page 24: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/24.jpg)
Programación en Spark
▪ Idea clave: conjuntos de datos distribuidos elásticos (DDR)
▪ Colecciones distribuidas de objetos que pueden ser almacenadas en caché en la memoria a través de los nodos del clúster
▪ Manipulada a través de diversos operadores paralelos
▪ Reconstruida automáticamente en caso de fallo
▪ Interfaz
▪ Lenguaje integrado Clean API Scala
▪ Puede ser usado interactivamente desde Scala
![Page 25: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/25.jpg)
Trabajo con RDDs
RDDRDD
RDDRDD
Transformations
Action Value
linesWithSpark = textFile.filter(lambda line: "Spark” in line)
linesWithSpark.count() 74
linesWithSpark.first()# Apache Spark
textFile = sc.textFile(”SomeFile.txt”)
![Page 26: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/26.jpg)
DDR: Distribuidos
● Datos no tienen que estar en una misma máquina
● Los datos se separa en particiones
○ Si necesitamos podemos operar en nuestra partición de datos
al mismo tiempo
Trabajador
Worker
Worker
DriverBlock 1
Block 2
Block 3
![Page 27: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/27.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
Worker
Worker
Worker
Driver
val lines = spark.textFile("hdfs://...")
![Page 28: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/28.jpg)
Ejemplos: Log Mining
Worker
Worker
Worker
Driver
val lines = spark.textFile("hdfs://...")
Cargar mensajes de error en memoria y buscar
patrones
RDD Base
![Page 29: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/29.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
Worker
Worker
Worker
Driver
![Page 30: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/30.jpg)
Ejemplos: Log Mining
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
Worker
Worker
Worker
Driver
Cargar mensajes de error en memoria y buscar
patronesRDD Transformado
![Page 31: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/31.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
Worker
Driver
messages.filter(_.contains("mysql")).count()
Worker
Worker
![Page 32: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/32.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Driver
messages.filter(_.contains("mysql")).count()
Worker
Worker
Poner RDD en cache
![Page 33: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/33.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
Driver
messages.filter(_.contains("mysql")).count()Acción
![Page 34: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/34.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Driver
messages.filter(_.contains("mysql")).count()
Worker
Block 1
Block 2
Block 3
![Page 35: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/35.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
Block 1
Block 2
Block 3
Drivertasks
tasks
messages.filter(_.contains("mysql")).count()
tasks
![Page 36: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/36.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
messages.filter(_.contains("mysql")).count()
Worker
Block 1
Block 2
Block 3
Driver
Read
HDFS
Block
Read
HDFS
Block
Read
HDFS
Block
![Page 37: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/37.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
messages.filter(_.contains("mysql")).count()
Block 1
Block 2
Block 3
Driver
Cache 1
Cache 2
Cache 3
Process
& Cache
Data
Process
& Cache
Data
Process
& Cache
Data
![Page 38: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/38.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
messages.filter(_.contains("mysql")).count()
Block 1
Block 2
Block 3
Driver
Cache 1
Cache 2
Cache 3
results
results
results
![Page 39: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/39.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
Block 1
Block 2
Block 3
Driver
Cache 1
Cache 2
Cache 3
messages.filter(_.contains("mysql")).count()
messages.filter(_.contains("php")).count()
![Page 40: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/40.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
Block 1
Block 2
Block 3
Cache 1
Cache 2
Cache 3
messages.filter(_.contains("mysql")).count()
messages.filter(_.contains("php")).count()
tasks
tasks
tasks
Driver
![Page 41: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/41.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
Block 1
Block 2
Block 3
Cache 1
Cache 2
Cache 3
messages.filter(_.contains("mysql")).count()
messages.filter(_.contains("php")).count()
Driver
Process
from
Cache
Process
from
Cache
Process
from
Cache
![Page 42: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/42.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
Block 1
Block 2
Block 3
Cache 1
Cache 2
Cache 3
messages.filter(_.contains("mysql")).count()
messages.filter(_.contains("php")).count()
Driver
results
results
results
![Page 43: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/43.jpg)
Ejemplos: Log MiningCargar mensajes de error en memoria y buscar patrones
val lines = spark.textFile("hdfs://...")
val errors = lines.filter(_.startsWith("ERROR"))
val messages = errors.map(_.split('\t´)(2))
messages.cache()
Worker
Worker
Worker
Block 1
Block 2
Block 3
Cache 1
Cache 2
Cache 3
messages.filter(_.contains("mysql")).count()
messages.filter(_.contains("php")).count()
Driver
Poner datos en cache ³ Resultados más rápidos
1 TB de datos de log
• 5-7 sec desde cache vs. 170s desde disco
![Page 44: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/44.jpg)
Interactive Shell
• Forma rápida de Aprender Spark
• Disponible enPython y Scala
• Se ejecuta como un aplicación en una existente SparkCluster ...
![Page 45: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/45.jpg)
Administrative GUIsH5P: // <Standalone Master>: 8080 (porpredeterminado)
![Page 46: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/46.jpg)
Source: http://spark.rstudio.com/
• Instalación mediante devtools
• Carga datos en Spark DataFramesdesde: data frames locales de R, Hive tables, CSV, JSON.
• Conectar al instancias locales de Spark y Cluster Remotos de Spark
sparklyr: R interface para Apache Spark
![Page 47: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/47.jpg)
dplyr and ML in sparklyr
• Incluye 3 familias de funciones para machine learning• ml_*: Machine learning algorithms para analizar datos en el paquete spark.ml.
• K-Means, GLM, LR, Survival Regression, DT, RF, GBT, PCA, Naive-Bayes, Multilayer Perceptron
• ft_*: Feature transformers para manipulación de features individuales.
• sdf_*: Funciones para manipulación de SparkDataFrames.
• Provee un backend dplyr para manipulación, análisis y visualizaciónde datos
%>%
dplyr con ML en sparklyr
![Page 48: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/48.jpg)
R Server: scale-out R, Enterprise
▪ 100% compatible con el open source R
▪ Se puede ejecutar en paralelo funciones R▪ Ideal para parameter sweeps, simulation, scoring.
▪ Funciones distribuidas y escalables “rx” dentro del paquete“RevoScaleR”.
▪ Transformaciones: rxDataStep()
▪ Estadísticas: rxSummary(), rxQuantile(), rxChiSquaredTest(), rxCrossTabs()…
▪ Algoritmos: rxLinMod(), rxLogit(), rxKmeans(), rxBTrees(), rxDForest()…
▪ Paralelismo: rxSetComputeContext()
![Page 49: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/49.jpg)
Deep Learning con Spark
![Page 50: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/50.jpg)
Deep Learning con Spark
![Page 51: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/51.jpg)
R Server Hadoop Architecturehitecture
R R R R
R
R R R R
R
Microsoft R Server
Proceso R Maestro en Edge Node
Apache YARN con Spark
Proceso R Worker R en Data Nodes
Datos en almacenamiento distribuido
Procesos R en Edge Node
![Page 52: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/52.jpg)
Limpiar datos con SparkR dentro de R Server
![Page 53: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/53.jpg)
Train, Score, Evaluate por medio del R Server
![Page 54: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/54.jpg)
Publicar el Web Service desde R
![Page 55: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/55.jpg)
TRABAJO CON SPARK
Anexos
![Page 56: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/56.jpg)
Uso del Shell
Modes:
MASTER=local ./spark-shellMASTER=local[2] ./spark-shell
# local, 1# local, 2
thread threads
MASTER=spark://host:port ./spark-shell # cluster
Launching:
spark-shell pyspark (IPYTHON=1)
![Page 57: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/57.jpg)
Creación de RDDs
# Load text file from local FS, HDFS, or S3> sc.textFile(“file.txt”)> sc.textFile(“directory/*.txt”)> sc.textFile(“hdfs://namenode:9000/path/file”)
# Use existing Hadoop InputFormat (Java/Scala only)> sc.hadoopFile(keyClass, valClass, inputFmt, conf)
# Turn a Python collection into an RDD> sc.parallelize([1, 2, 3])
![Page 58: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/58.jpg)
Transformaciones básicas
> nums = sc.parallelize([1, 2, 3])
# Pass each element through a function> squares = nums.map(lambda x: x*x) // {1, 4, 9}
zero or more others# Map each element to> nums.flatMap(lambda
> # => {0, 0, 1, 0, 1,x: => range(x))2}
Range object (sequence of numbers 0, 1, …, x-‐1)
# Keep elements passing a predicate> even = squares.filter(lambda x: x % 2 == 0) // {4}
![Page 59: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/59.jpg)
Acciones base
> nums = sc.parallelize([1, 2, 3])
# Retrieve RDD contents as> nums.collect() # => [1,
a local collection 2, 3]
# Count number of elements> nums.count() # => 3
# Merge elements with function> nums.reduce(lambda
an associative x, y: x + y) # => 6
# Write elements to a text file> nums.saveAsTextFile(“hdfs://file.txt”)
# Return first K elements> nums.take(2) # => [1, 2]
![Page 60: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/60.jpg)
Trabajo con Key-Value Pairs
Spark’s “distributed reduce” transformaciones para
operar sobre RDDs de key-value pairs
Python: pair = (a, b)pair[0] # => a pair[1] # => b
Scala: val pair = (a, b)
pair._1 // => a pair._2 // => b
Java: Tuple2 pair = new Tuple2(a, b);
pair._1 // => apair._2 // => b
![Page 61: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/61.jpg)
Operaciones Key-Value
> pets = sc.parallelize( [(“cat”, 1), (“dog”, 1), (“cat”, 2)])
> pets.sortByKey() # => {(cat, 1), (cat, 2), (dog, 1)}
reduceByKey implementa combinadores del
map
> pets.reduceByKey(lambda x, y:# => {(cat,
x + 3),
y)(dog, 1)}
> pets.groupByKey() # => {(cat, [1, 2]), (dog, [1])}
![Page 62: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/62.jpg)
> lines = sc.textFile(“hamlet.txt”)
> counts = lines.flatMap(lambda line: line.split(“ ”)).map(lambda word => (word, 1)).reduceByKey(lambda x, y: x + y)
Ejemplo: Word Count
“not to be” “to”“be”
(to, 1)(be, 1)
(be, 2)(not, 1)
(or, 1)(to, 2)
“to be or”“to”“be”
(to, 1)(be, 1)
“or” (or, 1)
“not” (not, 1)
![Page 63: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/63.jpg)
Key-Value Operaciones Adiconales
> visits = sc.parallelize([ (“index.html”,
(“about.html”,(“index.html”,
“1.2.3.4”),“3.4.5.6”),“1.3.3.1”) ])
> pageNames = sc.parallelize([ (“index.html”,(“about.html”,
“Home”),“About”) ])
>visits.join(pageNames
)
> visits.cogroup(pageNames)
# (“index.html”, ([“1.2.3.4”, “1.3.3.1”],[“Home”]))# (“about.html”, ([“3.4.5.6”], [“About”]))
##(“index.html”,(“index.html”,
(“1.2.3.4”,(“1.3.3.1”,
“Home”))“Home”))
# (“about.html”, (“3.4.5.6”, “About”))
![Page 64: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/64.jpg)
Establecer el nivel de paralelistmo
Todas las operaciones RDD tienen un
parámetros para establecer la cantidad de
tareasy: x + y, 5)> words.reduceByKey(lambda x,
> words.groupByKey(5)
> visits.join(pageViews, 5)
![Page 65: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/65.jpg)
Ajuste de la Nivel de Paralelismo
Todos la par RDD operaciones tomar una
opcional segundo parámetro para número
de tareasy: x + y, 5)>palabras.reduceByKey(lambda
X,
> palabras.groupByKey(5)
>visitas.unirse(Páginas
vistas, 5)
![Page 66: Análisis de datos con Apache Spark](https://reader033.vdocumento.com/reader033/viewer/2022052514/58ecd2fe1a28ab710b8b4675/html5/thumbnails/66.jpg)
RDD Operadores Adicionales
• map
• filter
• groupBy
• sort
• union
• join
• leftOuterJoin
• rightOuterJoin
• reduce
• count
• fold
• reduceByKey
• groupByKey
• cogroup
• cross
• zip
sample
take
first
partitionBy
mapWith
pipe
save ...