1. Trang chủ
  2. » Công Nghệ Thông Tin

Spark the definitive guide big data processing made simple

630 74 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 630
Dung lượng 4,46 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

In order to understand how to use Spark, let’s take a little time and understandthe basics of Spark’s architecture... This means that there can be multiple Spark appliications running on

Trang 2

1 1 A Gentle Introduction to Spark

1 What is Apache Spark?

2 Spark’s Basic Architecture

Trang 3

2 2 Structured API Overview

1 Spark’s Structured APIs

2 DataFrames and Datasets

Trang 4

3 Converting to Spark Types (Literals)

16 Repartition and Coalesce

17 Collecting Rows to the Driver

4 4 Working with Different Types of Data

1 Chapter Overview

1 Where to Look for APIs

2 Working with Booleans

3 Working with Numbers

4 Working with Strings

1 Regular Expressions

5 Working with Dates and Timestamps

6 Working with Nulls in Data

Trang 5

1 What are aggregations?

2 Aggregation Functions

1 count

2 Count Distinct

3 Approximate Count Distinct

4 First and Last

5 Min and Max

6 Sum

7 sumDistinct

8 Average

9 Variance and Standard Deviation

10 Skewness and Kurtosis

11 Covariance and Correlation

12 Aggregating to Complex Types

3 Grouping

1 Grouping with expressions

2 Grouping with Maps

4 Left Outer Joins

5 Right Outer Joins

6 Left Semi Joins

7 Left Anti Joins

8 Cross (Cartesian) Joins

9 Challenges with Joins

1 Joins on Complex Types

2 Handling Duplicate Column Names

10 How Spark Performs Joins

Trang 6

1 Node-to-Node Communication Strategies

7 7 Data Sources

1 The Data Source APIs

1 Basics of Reading Data

2 Basics of Writing Data

2 Reading JSON Files

3 Writing JSON Files

4 Parquet Files

1 Reading Parquet Files

2 Writing Parquet Files

5 ORC Files

1 Reading Orc Files

2 Writing Orc Files

1 Reading Text Files

2 Writing Out Text Files

8 Advanced IO Concepts

1 Reading Data in Parallel

2 Writing Data in Parallel

3 Writing Complex Types

8 8 Spark SQL

1 Spark SQL Concepts

1 What is SQL?

2 Big Data and SQL: Hive

3 Big Data and SQL: Spark SQL

2 How to Run Spark SQL Queries

Trang 7

1 SparkSQL Thrift JDBC/ODBC Server

2 Spark SQL CLI

3 Spark’s Programmatic SQL Interface

3 Tables

1 Creating Tables

2 Inserting Into Tables

3 Describing Table Metadata

4 Refreshing Table Metadata

6 Grouping and Aggregations

1 When to use Datasets

Trang 8

10 10 Low Level API Overview

1 The Low Level APIs

1 When to use the low level APIs?

1 Performance Considerations: Scala vs Python

2 RDD of Case Class VS Dataset

12 12 Advanced RDDs Operations

Trang 9

1 Advanced “Single RDD” Operations

1 Pipe RDDs to System Commands

2 Mapping over Values

3 Extracting Keys and Values

14 14 Advanced Analytics and Machine Learning

1 The Advanced Analytics Workflow

2 Different Advanced Analytics Tasks

Trang 10

15 15 Preprocessing and Feature Engineering

1 Formatting your models according to your use case

2 Properties of Transformers

3 Different Transformer Types

4 High Level Transformers

2 Removing Common Words

3 Creating Word Combinations

4 Converting Words into Numbers

6 Working with Continuous Features

Trang 11

3 Different Transformer Types

4 High Level Transformers

2 Removing Common Words

3 Creating Word Combinations

4 Converting Words into Numbers

6 Working with Continuous Features

Trang 13

3 Bisecting K-means Summary

3 Latent Dirichlet Allocation

Trang 14

1 Ways of using Deep Learning in Spark

2 Deep Learning Projects on Spark

3 A Simple Example with TensorFrames

Trang 15

Spark: The Definitive Guide

by Matei Zaharia and Bill Chambers

Copyright © 2017 Databricks All rights reserved

Printed in the United States of America

Published by O’Reilly Media, Inc , 1005 Gravenstein Highway North,Sebastopol, CA 95472

O’Reilly books may be purchased for educational, business, or salespromotional use Online editions are also available for most titles (

http://oreilly.com/safari ) For more information, contact our

corporate/institutional sales department: 800-998-9938 or

corporate@oreilly.com

Editor: Ann Spencer

Production Editor: FILL IN PRODUCTION EDITOR

Copyeditor: FILL IN COPYEDITOR

Proofreader: FILL IN PROOFREADER

Indexer: FILL IN INDEXER

Interior Designer: David Futato

Cover Designer: Karen Montgomery

Illustrator: Rebecca Demarest

January -4712: First Edition

Trang 16

Revision History for the First

Edition

2017-01-24: First Early Release

2017-03-01: Second Early Release

2017-04-27: Third Early Release

See http://oreilly.com/catalog/errata.csp?isbn=9781491912157 for releasedetails

The O’Reilly logo is a registered trademark of O’Reilly Media, Inc Spark:The Definitive Guide, the cover image, and related trade dress are trademarks

of O’Reilly Media, Inc

While the publisher and the author(s) have used good faith efforts to ensure thatthe information and instructions contained in this work are accurate, the

publisher and the author(s) disclaim all responsibility for errors or omissions,including without limitation responsibility for damages resulting from the use

of or reliance on this work Use of the information and instructions contained

in this work is at your own risk If any code samples or other technology thiswork contains or describes is subject to open source licenses or the

intellectual property rights of others, it is your responsibility to ensure thatyour use thereof complies with such licenses and/or rights

978-1-491-91215-7

[FILL IN]

Trang 17

Spark: The Definitive Guide

Big data processing made simple

Bill Chambers, Matei Zaharia

Trang 18

Chapter 1 A Gentle Introduction to Spark

Trang 19

What is Apache Spark?

Apache Spark is a processing system that makes working with big data simple

It is a group of much more than a programming paradigm but an ecosystem of avariety of packages, libraries, and systems built on top of the Core of Spark

Spark Core consists of two APIs The Unstructured and Structured APIs TheUnstructured API is Spark’s lower level set of APIs including Resilient

Distributed Datasets (RDDs), Accumulators, and Broadcast variables TheStructured API consists of DataFrames, Datasets, Spark SQL and is the

interface that most users should use The difference between the two is that one

is optimized to work with structured data in a spreadsheet-like interface whilethe other is meant for manipulation of raw java objects Outside of Spark Coresit a variety of tools, libraries, and languages like MLlib for performing

machine learning, the GraphX module for performing graph processing, andSparkR for working with Spark clusters from the R langauge

We will cover all of these tools in due time however this chapter will coverthe cornerstone concepts you need to write Spark programs and understand Wewill frequently return to these cornerstone concepts throughout the book

Trang 20

Spark’s Basic Architecture

Typically when you think of a “computer” you think about one machine sitting

on your desk at home or at work This machine works perfectly well for

watching movies, or working with spreadsheet software but as many userslikely experienced at some point, there are somethings that your computer isnot powerful enough to perform One particularly challenging area is dataprocessing Single machines simply cannot have enough power and resources

to perform computations on huge amounts of information (or the user may not

have time to wait for the computation to finish) A cluster, or group of

machines, pools the resources of many machines together Now a group ofmachines alone is not powerful, you need a framework to coordinate workacross them Spark is a tool for just that, managing and coordinating the

resources of a cluster of computers

In order to understand how to use Spark, let’s take a little time and understandthe basics of Spark’s architecture

Trang 21

Spark Applications

Spark Applications consist of a driver process and a set of executor

processes The driver process, Figure 1-2, sits on the driver node and is

responsible for three things: maintaining information about the Spark

application, responding to a user’s program, and analyzing, distributing, andscheduling work across the executors As suggested by figure 1-1, the driverprocess is absolutely essential - it’s the heart of a Spark Application and

maintains all relevant information during the lifetime of the application

An executor is responsible for two things: executing code assigned to it by thedriver and reporting the state of the computation back to the driver node

The last piece relevant piece for us is the cluster manager The cluster managercontrols physical machines and allocates resources to Spark applications Thiscan be one of several core cluster managers: Spark’s standalone cluster

manager, YARN, or Mesos This means that there can be multiple Spark

appliications running on a cluster at the same time

Trang 22

Figure 1-1 shows, on the left, our driver and on the right the four worker nodes

on the right

NOTE:

Spark, in addition to its cluster mode, also has a local mode Remember how

the driver and executors are processes? This means that Spark does not dictatewhere these processes live In local mode, these processes run on your

individual computer instead of a cluster See figure 1-3 for a high level

diagram of this architecture This is the easiest way to get started with Sparkand what the demonstrations in this book should run on

Trang 24

Using Spark from Scala, Java, SQL, Python, or R

As you likely noticed in the previous figures, Spark works with multiple

languages These language APIs allow you to run Spark code from anotherlanguage When using the Structured APIs, code written in any of Spark’ssupported languages should perform the same, there are some caveats to thisbut in general this is the case Before diving into the details, let’s just touch abit on each of these langauges and their integration with Spark

R

Spark supports the execution of R code through a project called SparkR We

Trang 25

will cover this in the Ecosystem section of the book along with otherinteresting projects that aim to do the same thing like Sparklyr.

Trang 26

Key Concepts

Now we have not exhaustively explored every detail about Spark’s

architecture because at this point it’s not necessary to get us closer to runningour own Spark code The key points are that:

Spark has some cluster manager that maintains an understanding of theresources available

The driver process is responsible for executing our driver program’scommands accross the executors in order to complete our task

There are two modes that you can use, cluster mode (on multiple

machines) and local mode (on a single machine)

Trang 27

Starting Spark

Now in the previous chapter we talked about what you need to do to get startedwith Spark by setting your Java, Scala, and Python versions Now it’s time tostart Spark’s local mode, this means running /bin/spark-shell Once youstart that you will see a console, into which you can enter commands If youwould like to work in Python you would run ./bin/pyspark

Trang 28

From the beginning of this chapter we know that we leverage a driver process

to maintain our Spark Application This driver process manifests itself to the

user as something called the SparkSession The SparkSession instance is the

entrance point to executing code in Spark, in any language, and is the

user-facing part of a Spark Application In Scala and Python the variable is

available as spark when you start up the Spark console Let’s go ahead and

look at the SparkSession in both Scala and/or Python

%scala

spark

%python

spark

In Scala, you should see something like:

res0: org.apache.spark.sql.SparkSession = org.apache.spark.sql.SparkSession@27159a24

In Python you’ll see something like:

<pyspark.sql.session.SparkSession at 0x7efda4c1ccd0>

Now you need to understand how to submit commands to the SparkSession

Let’s do that by performing one of the simplest tasks that we can - creating a

range of numbers This range of numbers is just like a named column in a

Trang 29

You just ran your first Spark code! We created a DataFrame with one columncontaining 1000 rows with values from 0 to 999 This range of number

represents a distributed collection Running on a cluster, each part of this

range of numbers would exist on a different executor You’ll notice that the

value of myRange is a DataFrame, let’s introduce DataFrames!

Trang 30

The DataFrame concept is not unique to Spark The R Language has a similarconcept as do certain libraries in the Python programming language However,Python/R DataFrames (with some exceptions) exist on one machine rather thanmultiple machines This limits what you can do with a given DataFrame inpython and R to the resources that exist on that specific machine However,since Spark has language interfaces for both Python and R, it’s quite easy toconvert to Pandas (Python) DataFrames to Spark DataFrames and R

DataFrames to Spark DataFrames (in R)

Note

Spark has several core abstractions: Datasets, DataFrames, SQL Tables, andResilient Distributed Datasets (RDDs) These abstractions all represent

distributed collections of data however they have different interfaces for

working with that data The easiest and most efficient are DataFrames, whichare available in all languages We cover Datasets in Section II, Chapter 8 andRDDs in depth in Section III Chapter 2 and 3 The following concepts apply toall of the core abstractions

Trang 31

In order to leverage the the resources of the machines in cluster, Spark breaks

up the data into chunks, called partitions A partition is a collection of rows

that sit on one physical machine in our cluster A DataFrame consists of zero ormore partitions

When we perform some computation, Spark will operate on each partition in

parallel unless an operation calls for a shuffle, where multiple partitions need

to share data Think about it this way, if you need to run some errands youtypically have to do those one by one, or serially What if you could insteadgive one errand to a worker who would then complete that task and then reportback to you? In that scenario, the key is to break up errands efficiently so thatyou can get as much work done in as little time as possible In the Spark world

an “errand” is equivalent to computation + data and a “worker” is equivalent

to an executor

Now with DataFrames, we do not manipulate partitions individually, Sparkgives us the DataFrame interface for doing that Now when we ran the abovecode, you’ll notice there was no list of numbers, only a type signature This isbecause Spark organizes computation into two categories, transformations andactions When we create a DataFrame, we perform a transformation

Trang 32

In Spark, the core data structures are immutable meaning they cannot be

changed once created This might seem like a strange concept at first, if youcannot change it, how are you supposed to use it? In order to “change” a

DataFrame you will have to instruct Spark how you would like to modify theDataFrame you have into the one that you want These instructions are called

transformations Transformations are how you, as user, specify how you

would like to transform the DataFrame you currently have to the DataFramethat you want to have Let’s show an example To computer whether or not anumber is divisible by two, we use the modulo operation to see the remainderleft over from dividing one number by another

We can use this operation to perform a transformation from our current

DataFrame to a DataFrame that only contains numbers divisible by two To dothis, we perform the modulo operation on each row in the data and filter out theresults that do not result in zero We can specify this filter using a where

SELECT * FROM myRange WHERE number % 2 = 0

When we get to the next part of this chapter to discuss Spark SQL, you willfind out that this expression is perfectly valid We’ll show you how to turn any

Trang 33

DataFrame into a table.

These operations create a new DataFrame but do not execute any computation.The reason for this is that DataFrame transformations do not trigger Spark toexecute your code, they are lazily evaluated

Trang 34

Lazy Evaluation

Lazy evaulation means that Spark will wait until the very last moment to

execute your transformations In Spark, instead of modifying the data quickly,

we build up a plan of the transformations that we would like to apply Spark,

by waiting for the last minute to execute your code, can try and make this planrun as efficiently as possible across the cluster

Trang 36

In this chapter we will avoid the details of Spark jobs and the Spark UI, at thispoint you should understand that a Spark job represents a set of transformationstriggered by an individual action We talk in depth about the Spark UI and thebreakdown of a Spark job in Section IV.

Trang 37

A Basic Transformation Data Flow

In the previous example, we created a DataFrame from a range of data

Interesting, but not exactly applicable to industry problems Let’s create someDataFrames with real data in order to better understand how they work We’ll

be using some flight data from the United States Bureau of Transportation

statistics

We touched briefly on the SparkSession as the interface the entry point to

performing work on the Spark cluster the SparkSession can do much more thansimply parallelize an array it can create DataFrames directly from a file or set

of files In this case, we will create our DataFrames from a JavaScript ObjectNotation (JSON) file that contains some summary flight information as

collected by the United States Bureau of Transport Statistics In the folderprovided, you’ll see that we have one file per year

%fs ls /mnt/defg/chapter-1-data/json/

This file has one JSON object per line and is typically refered to as

line-delimited JSON

%fs head /mnt/defg/chapter-1-data/json/2015-summary.json

What we’ll do is start with one specific year and then work up to a larger set

of data Let’s go ahead and create a DataFrame from 2015 To do this we willuse the DataFrameReader (via spark.read) interface, specify the format andthe path

Trang 39

transformations Spark will run on the cluster We can use this to make sure thatour code is as optimized as possible We will not cover that in this chapter, butwill touch on it in the optimization chapter.

Now in order to gain a better understanding of transformations and plans, let’screate a slightly more complicated plan We will specify an intermediate stepwhich will be to sort the DataFrame by the values in the first column We cantell from our DataFrame’s column types that it’s a string so we know that itwill sort the data from A to Z

Note

Remember, we cannot modify this DataFrame by specifying the sort

transformation, we can only create a new DataFrame by transforming thatprevious DataFrame We can see that even though we’re seeming to ask forcomputation to be completed Spark doesn’t yet execute this command, we’rejust building up a plan The illustration in figure 1-8 represents the spark plan

we see in the explain plan for that DataFrame

Trang 40

sortedFlightData2015.take(2)

%python

sortedFlightData2015.take(2)

The conceptual plan that we executed previously is illustrated in Figure-9

Now this planning process is essentially defining lineage for the DataFrame so

that at any given point in time Spark knows how to recompute any partition of agiven DataFrame all the way back to a robust data source be it a file or

database Now that we performed this action, remember that we can navigate

to the Spark UI (port 4040) and see the information about this jobs stages andtasks

Now hopefully you have grasped the basics but let’s just reinforce some of thecore concepts with another data pipeline We’re going to be using the sameflight data used except that this time we’ll be using a copy of the data in commaseperated value (CSV) format

If you look at the previous code, you’ll notice that the column names appeared

in our results That’s because each line is a json object that has a defined

structure or schema As mentioned, the schema defines the column names andtypes This is a term that is used in the database world to describe what typesare in every column of a table and it’s no different in Spark In this case theschema defines ORIGIN_COUNTRY_NAME to be a string JSON and CSVs qualify

as semi-structured data formats and Spark supports a range of data sources inits APIs and ecosystem

Let’s go ahead and define our DataFrame just like we did before however thistime we’re going to specify an option for our DataFrameReader Options

Ngày đăng: 04/03/2019, 14:10

TỪ KHÓA LIÊN QUAN