Exxact/Deep Learning,HPC,AV,Distribution&More

Apache Spark 란 무엇입니까?

Apache Spark 는 기술 영역에서 가장 인기있는 새로운 트렌드 중 하나입니다. 그것은 프레임워크와 아마도 가장 높은 잠재력을 실현하는 과일의 결혼 사이에는 빅 데이터와 기계 학습합니다.

그것은 빠른 실행(최대 100 배 이상 빠른 전통적인 Hadoop MapReduce 으로 인해 in-memory 운영,제공하는 강력,분산,결함 관대한 데이터를 객체(불 RDD),과 통합되는 아름답게 세계와의 기계 학습 및 그래프의 분석을 통해충 패키지는 다음과 같 Mlib 및 GraphX.

The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-Apache-Spark-288x300.png

Spark 는 Hadoop/HDFS 에서 구현되며 주로 Java 와 유사한 함수형 프로그래밍 언어 인 Scala 로 작성됩니다. 사실 Scala 는 시스템에 최신 Java 설치가 필요하며 JVM 에서 실행됩니다. 그러나 대부분의 초보자들에게 스칼라는 데이터 과학의 세계로 모험하기 위해 먼저 배우는 언어가 아닙니다. 다행히도,불꽃 제공하는 멋진 Python 통합이라는 PySpark 수 있는 파이썬 프로그래머와 인터페이스는 불꽃 프레임워크 및 배 데이터를 조작하는 방법에서 규모와 함께 작업체 및 알고리즘을 통해 분산 파일 시스템입니다.

이 기사에서는 PySpark 의 기본 사항을 배우게됩니다. 많은 개념(지속적으로 발전하고 도입)및 따라서,우리는 그냥에 초점을 기본으로 몇 가지 간단한 예제입니다. 독자는 이것들에 건설하고 독자적으로 더 많은 것을 탐구하는 것이 좋습니다.

Apache Spark 의 짧은 역사

Apache Spark 는 2009 년 UC Berkeley AMPLab 에서 연구 프로젝트로 시작하여 2010 년 초에 오픈 소스되었습니다. UC Berkeley 의 수업 프로젝트였습니다. 아이디어를 구축하는 클러스터 관리 프레임워크를 지원할 수 있는 다른 종류의 클러스터 컴퓨팅 시스템입니다. 시스템 뒤에있는 많은 아이디어는 수년에 걸쳐 다양한 연구 논문에 발표되었습니다. 출시 된 후 Spark 는 광범위한 개발자 커뮤니티로 성장하여 2013 년 Apache Software Foundation 으로 이전했습니다. 오늘날이 프로젝트는 수백 개의 조직에서 수백 명의 개발자 커뮤니티에 의해 공동으로 개발되었습니다.

Spark 는 프로그래밍 언어가 아닙니다.

기억해야 할 한 가지는 Spark 가 Python 이나 Java 와 같은 프로그래밍 언어가 아니라는 것입니다. 광범위한 상황에서 사용하기에 적합한 범용 분산 데이터 처리 엔진입니다. 규모와 고속 모두에서 빅 데이터 처리에 특히 유용합니다.

응용 프로그램 개발자 및 데이터 과학자들은 일반적으로 통합하는 불꽃을 사용하면 응용 프로그램을 빠르게 쿼리,분석 및 변환 데이터에서는 규모입니다. 작업의 일부는 가장 자주와 연관된 불꽃을 포함-ETL 및 SQL 배치 작업에 걸쳐 큰 데이터 세트(자주의 테라 바이트의 크기),처리의 스트리밍 데이터 IoT 장치 및 노드의 데이터 각종 센서,금융 및 트랜잭션 시스템의 모든 종류,그리고-기계학습을 위한 작업 전자상거래 또는 이용됩니다.

핵심에서 Spark 는 분산 파일을 처리하기 위해 Hadoop/HDFS 프레임 워크 위에 빌드됩니다. 주로 Java 의 기능적 언어 변형 인 Scala 로 구현됩니다. 가 있는 핵심 Spark 데이터 처리 엔진이지만,그 위에,많은 라이브러리 개발을 위한 SQL-형 쿼리 분석,분산 machine learning,대규모 그래프산,그리고 스트리밍 데이터 처리합니다. Java,Python,Scala 및 R 과 같은 쉬운 인터페이스 라이브러리의 형태로 Spark 에서 여러 프로그래밍 언어가 지원됩니다.

스파크를 사용하 MapReduce 패러다임이 분산 처리를 위한

의 기본 아이디어가 분산 처리를 나누는 데이터는 덩어리로 다루기 쉬운 작은 조각을 포함하여(어떤 필터링 및 정렬),가지고 계산이 가까운 데이터를 사용하는 작은 노드의 대규모 클러스터 특정 작업에 대한 다음 다시 그들을 결합하다. 분할 부분을’지도’동작이라고하며 재조합을’감소’동작이라고합니다. 함께,그들은 2004 년경 Google 에 의해 소개 된 유명한’MapReduce’패러다임을 만듭니다(여기 원본 논문 참조).

는 경우,예를 들어,파일은 100 레코드를 처리할 수 있 100 맵퍼을 실행할 수 있습 함께하는 과정을 하나의 레코드는 각. 아니면 50 명의 매퍼가 함께 실행되어 각각 두 개의 레코드를 처리 할 수 있습니다. 모든 매퍼가 처리를 완료 한 후 프레임 워크는 감속기에 전달하기 전에 결과를 뒤섞고 정렬합니다. 매퍼가 아직 진행중인 동안 감속기를 시작할 수 없습니다. 키가 동일한 모든 맵 출력 값이 단일 감속기에 할당된 다음 해당 키의 값을 집계합니다.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.jpg

설정하는 방법 PySpark

경우에 당신은 이미 친숙한 Python 과 같은 라이브러리 맥스와 마르타의 관계가 발전하려고 Numpy,다음 PySpark 장/프레임워크를 배우를 만들기 위해 확장 가능,데이터 집중적인 분석은과 파이프라인을 이용하여 힘의 불꽃에서 배경입니다.

정확한 프로세스의 설치 및 설정 PySpark 환경(독립 실행형기)은 관련된 다소 다를 수 있습에 따라 약간 시스템과 환경을 제공합니다. 목표는 pyspark 패키지를 사용하여 백그라운드에서 Spark 로 작업하는 일반 Jupyter 데이터 과학 환경을 얻는 것입니다.

Medium 에 대한이 기사에서는 단계별 설정 프로세스에 대한 자세한 내용을 제공합니다.

The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-Apache-Spark-Setup.또는 Spark 를 연습하기 위해 Databricks 설정을 사용할 수 있습니다. 이 회사는 Spark 의 원래 제작자에 의해 만들어졌으며 Spark 로 분산 분석을 수행 할 수있는 뛰어난 출시 준비 환경을 갖추고 있습니다.그러나 아이디어는 항상 동일합니다. 많은 노드에 작은 고정 청크로 큰 데이터 세트를 배포(및 복제)하고 있습니다. 그런 다음 전체 작업이 병렬화되고 내결함성 및 확장 성이 있도록 컴퓨팅 엔진을 가까이에 가져옵니다.

PySpark 및 Jupyter notebook 으로 작업하면 AWS 또는 Databricks 플랫폼에서 아무 것도 지출하지 않고도 이러한 모든 개념을 배울 수 있습니다. 또한 데이터베이스 조작 및 기계 학습을 위해 SparkSQL 및 MLlib 와 쉽게 인터페이스 할 수 있습니다. 이러한 개념을 미리 내면화 한 경우 실제 대형 클러스터로 작업을 시작하는 것이 훨씬 쉬울 것입니다!

탄력 분포 데이터 집합(RDD)및 SparkContext

많은 스파크 프로그램의 주위에 회귀한 개념의 탄력 분포 데이터 집합(RDD),which is a fault-tolerant 요소의 컬렉션에 작동할 수 있는 병렬로 작동합니다. SparkContext 는 드라이버 프로그램에 상주하며 클러스터 관리자를 통해 작업자 노드를 통한 분산 데이터를 관리합니다. 좋은 사용하는 방법에 대한 것 PySpark 는 이 모든 복잡한 데이터를 분할 및 작업 관리가 자동으로 처리에 돌아와 프로그래머에 초점을 맞출 수 있는 특정 분석 또는 기계 학습습니다.나는 이것이 내가하는 일이 아니라는 것을 알았습니다.png

rdd-1

하는 방법은 두 가지가 있을 만들 rdd 내–병렬화는 기존의 컬렉션에서 드라이버 프로그램이나 참조 데이터 집합에서 외부 저장 시스템과 같은 공유된 파일 시스템,HDFS,스거나,모든 데이터 원본을 제공하고 Hadoop InputFormat.

파이썬 기반 접근 방식을 사용한 일러스트레이션의 경우 여기에서 첫 번째 유형의 예제를 제공 할 것입니다. Numpy random 을 사용하여 20 개의 임의의 정수(0 에서 10 사이)의 간단한 파이썬 배열을 만들 수 있습니다.randint(),그리고 다음과 같이 RDD 객체를 만듭니다.

from pyspark import SparkContextimport numpy as npsc=SparkContext(master="local")lst=np.random.randint(0,10,20)A=sc.parallelize(lst)

인수에서’4’를 참고하십시오. 이 SparkContext 객체에 사용할 4 개의 컴퓨팅 코어(로컬 컴퓨터에서)를 나타냅니다. 면 우리는 확인 형식의 RDD 체,우리는 다음과 같은 얻을,

type(A)>> pyspark.rdd.RDD

반대하는 병렬화 모음(으로 수집하())제공하는 모든 분산 요소 및 반품이 그들 머리 노드입니다.

A.collect()>> 

그러나 A 는 더 이상 간단한 Numpy 배열이 아닙니다. Glom()메서드를 사용하여 파티션이 어떻게 생성되는지 확인할 수 있습니다.

A.glom().collect()>> , , , ]

이제 막 SC 고 다시는 그것을 가진 2 개의 중핵을 볼 때 일어나는 과정을 반복합니다.

sc.stop()sc=SparkContext(master="local")A = sc.parallelize(lst)A.glom().collect()>> , ]

RDD 는 이제 4 개가 아닌 두 개의 청크에 분산되어 있습니다!

분산 데이터 분석의 첫 번째 단계에 대해 알게되었습니다. 을 제어하는 방법 당신 데이터가 분할 통해 작은 덩어리를 처리를 위해

의 몇 가지 예는 기본 작업으로 RDD&PySpark

>> 20

첫 번째 요소(첫 번째)과 최초 몇 가지 요소(가)

A.first()>> 4A.take(3)>> 

제거와 중복 사용하여 고유

참고:이 작업에 필요한 셔플을 검출하기 위해 중복을 통해 파티션이 있습니다. 그래서,그것은 느린 작업입니다. 과용하지 마십시오.

A_distinct=A.distinct()A_distinct.collect()>> 

요약,모든 요소 사용을 줄이는 방법

참고 사용하는 람다 함수에서 이

A.reduce(lambda x,y:x+y)>> 80

또는 직접적 합계() 방법

A.sum()>> 80

을 찾는 요소를 최대로 줄이기

A.reduce(lambda x,y: x if x > y else y)>> 9

를 찾는 가장 긴 단어의 덩 text

words = 'These are some of the best Macintosh computers ever'.split(' ')wordRDD = sc.parallelize(words)wordRDD.reduce(lambda w,v: w if len(w)>len(v) else v)>> 'computers'

필터를 사용하여 논리에 대한 기반을 필터링

# Return RDD with elements (greater than zero) divisible by 3A.filter(lambda x:x%3==0 and x!=0).collect()>> 

쓰 일반 Python 기능을 사용으로 감소()

def largerThan(x,y): """ Returns the last word among the longest words in a list """ if len(x)> len(y): return x elif len(y) > len(x): return y else: if x < y: return x else: return ywordRDD.reduce(largerThan)>> 'Macintosh'

참고 여기에는 x<y 는 사전 비교를 수행하고 매킨토시가 컴퓨터보다 크다는 것을 결정합니다!

매핑 작업으로 람다 함수와 PySpark

B=A.map(lambda x:x*x)B.collect()>> 

Mapping 일반 Python 기능에 PySpark

def square_if_odd(x): """ Squares if odd, otherwise keeps the argument unchanged """ if x%2==1: return x*x else: return xA.map(square_if_odd).collect()>> 

groupby 반환합니다 RDD 의 그룹화 요소(반복 가능한)에 의하여 지정된 작업 그룹

에서 다음 예제 우리가 사용하는 목록-이해와 함께 그룹 목록을 만들려면 두 가지 요소 각각은 머리글(의 결과는 람다 함수,간단한 모듈 2),과 정렬된 목록 요소는 상승하는 결과입니다. 당신이 상상할 수 있는 것이 쉽게 이런 종류의 분리에 올 수 있는 특별한 처리해야 하는 데이터를화/통조림을 기반으로 특정 작업이 수행됩니다.

result=A.groupBy(lambda x:x%2).collect()sorted()>> ), (1, )]

를 사용하여 히스토그램

히스토그램()메소드는 목록통/물통/td>의 결과로 히스토그램(비),

B.histogram()>> (, )

설정 운영

당신은 또한 일반 설정 작업에 rdd 내 같은 연합(eu),교차로에()빼기,(),또는 직교().

더 많은 예제를 보려면이 Jupyter 노트북을 확인하십시오.

깊은 학습 Ebook 다운로드

게으른 평가와 PySpark(캐싱)

가 평가/계산 전략을 준비하는 대한 자세한 단계별 내부 지도의 실행을 위한 파이프라인 컴퓨팅 작업을 하지만 지연이 최종할 때까지 실행할 때 그것은 절대적으로 필요합니다. 이 전략은 많은 병렬화 된 빅 데이터 작업 속도를 높이기위한 Spark 의 핵심입니다.

의 두 번 사용하여 CPU 코어 이 예를 들어,

sc = SparkContext(master="local")

을 RDD 으로 1 백만 요소

%%timerdd1 = sc.parallelize(range(1000000))>> CPU times: user 316 µs, sys: 5.13 ms, total: 5.45 ms, Wall time: 24.6 ms

일부 컴퓨팅 기능–taketime

from math import cosdef taketime(x): return cos(x)

체크인 시간이 얼마나에 의해 촬영 taketime 기능

%%timetaketime(2)>> CPU times: user 21 µs, sys: 7 µs, total: 28 µs, Wall time: 31.5 µs>> -0.4161468365471424

이것을 기억 그 결과,taketime()함수했 벽면 시간의 31.5us. 물론 정확한 숫자는 작업중인 기계에 따라 다릅니다.

이제 함수에 대한 맵 작업을 수행하십시오.

%%timeinterim = rdd1.map(lambda x: taketime(x))>> CPU times: user 23 µs, sys: 8 µs, total: 31 µs, Wall time: 34.8 µs

각 테이크 타임 함수는 어떻게 45 를 취합니다.8 미국하지만 1 백만 요소 rdd 와지도 작업은 비슷한 시간이 걸렸다?

게으른 평가 때문에 즉,이전 단계에서 아무 것도 계산되지 않았으며 실행 계획 만 수행되었습니다. 변수 중간은 데이터 구조를 가리 키지 않고 대신 종속성 그래프로 표현 된 실행 계획을 가리 킵니다. 종속성 그래프는 Rdd 가 서로 계산되는 방법을 정의합니다.

감소 방법에 의한 실제 실행

%%timeprint('output =',interim.reduce(lambda x,y:x+y))>> output = -0.28870546796843666>> CPU times: user 11.6 ms, sys: 5.56 ms, total: 17.2 ms, Wall time: 15.6 s

그래서,여기서 벽 시간은 15.6 초입니다. Taketime()함수는 31.5us 의 벽 시간을 가졌음을 기억하십니까? 따라서 우리는 총 시간이 1 백만 배열에 대해~31 초 정도 될 것으로 기대합니다. 두 개의 코어에서 병렬 작동으로 인해~15 초가 걸렸습니다.

이제 우리가 저장되지 않습(구체화된)중간 결과 중간에,그래서 다른 간단한 동작(예를들면 계산 요소>0)걸릴 것이 거의 같은 시간입니다.

%%timeprint(interim.filter(lambda x:x>0).count())>> 500000>> CPU times: user 10.6 ms, sys: 8.55 ms, total: 19.2 ms, Wall time: 12.1 s

캐싱을 줄일 수 계산에 시간이 비슷한 작업(출 메모리)

기억 dependency graph 우리는 이전 단계에서? 캐시 메소드를 사용하여 이전과 동일한 계산을 실행하여 의존성 그래프에 캐싱 계획을 알릴 수 있습니다.

%%timeinterim = rdd1.map(lambda x: taketime(x)).cache()

이 첫째 계산을 개량하지 않을 것이지만,그것은 캐시 중간 결과,

%%timeprint('output =',interim.reduce(lambda x,y:x+y))>> output = -0.28870546796843666>> CPU times: user 16.4 ms, sys: 2.24 ms, total: 18.7 ms, Wall time: 15.3 s

지금 실행하여 동일한 필터링 방법의 도움으로 캐시한 결과,

%%timeprint(interim.filter(lambda x:x>0).count())>> 500000>> CPU times: user 14.2 ms, sys: 3.27 ms, total: 17.4 ms, Wall time: 811 ms

Wow! 컴퓨팅 시간은 12 초 이전부터 1 초 미만으로 내려 왔습니다! 이런 식으로 게으른 실행과 캐싱 및 병렬화는 Spark 를 사용한 프로그래밍의 핵심 기능입니다.

데이터 프레임 및 SparkSQL

Rdd 외에도 Spark 프레임 워크의 두 번째 주요 데이터 구조는 데이터 프레임입니다. Python Pandas 또는 R 데이터 프레임으로 작업을 수행 한 경우 개념이 익숙한 것처럼 보일 수 있습니다.

데이터 프레임은 명명 된 열 아래에 분산 된 행 모음입니다. 관계형 데이터베이스의 테이블,열 머리글이있는 Excel 시트 또는 R/Python 의 데이터 프레임과 개념적으로 동일하지만 후드 아래에는 더 풍부한 최적화가 있습니다. 데이터 프레임은 구조화 된 데이터 파일,Hive 의 테이블,외부 데이터베이스 또는 기존 Rdd 와 같은 다양한 소스로 구성 할 수 있습니다. 또한 RDD 와 몇 가지 일반적인 특성을 공유합니다.

  • 자연에서 불변:우리는 데이터 프레임/RDD 를 한 번 만들 수 있지만 변경할 수는 없습니다. 그리고 변환을 적용한 후 데이터 프레임/RDD 를 변환 할 수 있습니다.
  • 게으른 평가:이는 작업이 수행 될 때까지 작업이 실행되지 않음을 의미합니다. 분산:rdd 와 DataFrame 은 모두 자연에 분산되어 있습니다.

The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-DataFrame-in-PySpark.png

데이터 프레임의 장점

  • 데이터 프레임은 구조화 된 또는 반 구조화 된 데이터의 대규모 컬렉션을 처리하도록 설계되었습니다.Spark DataFrame 의
  • 관측치는 명명 된 열 아래에 구성되어있어 Apache Spark 가 데이터 프레임의 스키마를 이해하는 데 도움이됩니다. 이는 Spark 가 이러한 쿼리에서 실행 계획을 최적화하는 데 도움이됩니다.
  • Apache Spark 의 DataFrame 에는 페타 바이트의 데이터를 처리 할 수있는 기능이 있습니다.
  • DataFrame 은 광범위한 데이터 형식 및 소스를 지원합니다.
  • Python,R,Scala,Java 와 같은 다른 언어에 대한 API 지원이 있습니다.

데이터 프레임 기초를 들어

에 대한 기본적인 의 사용 예 DataFrames 는 다음을 참조하십시오 Jupyter 노트북,

Spark 데이터 프레임 기본

Spark 데이터 프레임 운영

SparkSQL 하는 데 도움이의 격차를 해소를 위한 PySpark

관계형 데이터 저장을 쉽게 구축 및 쿼리입니다. 사용자와 개발자들이 선호하 쓰기 쉽게 해석,선언적 쿼리에서 인간과 같은 읽기 쉬운 언어와 같은 SQL. 그러나,데이터 시작한 볼륨 증가하고 다양한 관계형 접근 방식하지 않는 확장을 위해 충분히 큰 건물이터 애플리케이션 및 분석 시스템입니다.

우리는 Hadoop 과 Mapreduce 패러다임을 통해 빅 데이터 분석 영역에서 성공을 거두었습니다. 이 강력하지만,일반적으로 느린,그리고 사용자는 낮은 수준,절차적 프로그래밍 인터페이스에 필요한 사람들을 많이 쓰기 코드에 대한 매우 간단한 데이터 변환. 그러나,일단 불꽃 발표되었다,그것은 정말 방법을 혁명을 일으켰 빅 데이터 분석이 수행되었에 초점을 메모리에서 컴퓨팅,내결함성,높은 수준의 추상화,그리고 사용의 용이성이다.

Spark SQL 은 본질적으로 우리가 이전에 언급 한 두 모델,즉 관계형 및 절차 모델 간의 격차를 해소하려고합니다. Spark SQL 작품을 통해 데이터 프레임 API 을 수행할 수 있는 관계 작업에 모두 외부 데이터 소스와 스파크의 기본 분산 컬렉션에서 확장!

The-Benefits-Examples-of-Using-Apache-Spark-with-PySpark-in-Python-Spark-SQL-1024x489.Spark SQL 이 너무 빠르고 최적화 된 이유는 무엇입니까? 그 이유는 스칼라의 함수형 프로그래밍 구조를 기반으로 한 새로운 확장 가능한 최적화 도구 인 촉매 때문입니다. Catalyst 는 규칙 기반 및 비용 기반 최적화를 모두 지원합니다. 확장 가능한 최적화 프로그램은 과거에 제안되었지만 일반적으로 규칙을 지정하기 위해 복잡한 도메인 별 언어가 필요했습니다. 일반적으로 이로 인해 상당한 학습 곡선과 유지 관리 부담이 생깁니다. 반면에,촉매를 사용하여 표준 기능의 스칼라 프로그래밍 언어와 같은 패턴 매칭하여 개발자가 사용하여 전체 프로그래밍 언어로는 여전히 만드는 쉬운 규칙을 지정합니다.

참조할 수 있습니다 다음 Jupyter 노트북에 대한 소개는 데이터베이스 작업으로 SparkSQL:

SparkSQL 데이터베이스 작업에 기본

당신은 어떻게 사용 PySpark 에서 귀하의 프로젝트가 있습니까?

우리는 우리 커버의 기본 아파치 스파크 생태계 및 어떻게 작동과 함께 몇 가지 기본적인 예문의 핵심 데이터 구조 RDD Python 인터페이스 PySpark. 또한 데이터 프레임과 SparkSQL 은 예제 코드 노트북에 대한 참조 링크와 함께 논의되었습니다.

Python 과 함께 사용되는 Apache Spark 를 배우고 실험하는 것이 훨씬 더 많습니다. PySpark 웹 사이트는 레이더에 가지고 좋은 참조입니다,그들은 정기적 인 업데이트 및 개선 사항을–그래서 그 눈을 유지.

그리고 Apache Spark 로 대규모 분산 기계 학습을 수행하는 데 관심이 있다면 PySpark 생태계의 MLLib 부분을 확인하십시오.

이 PySpark 블로그를 즐겼습니까? 체크 아웃해야합니다:

  • Privacy-Preserving Deep Learning – PySyft Versus TF-Encrypted

Accelerate-your-AI.-1024x202.jpg

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 항목은 *(으)로 표시합니다