스칼라 언어와 스파크 응용 프로그램 개발 [고토: 동의 블로그 http://www.dongxicheng.org]
그래서 그것은 스칼라를 사용 하 여 스파크 응용 프로그램을 개발할 자연 점화 커널 스칼라 언어에 의해 개발 된다. 스칼라 언어에 익숙하지 자바 프로그래머 또는 관련된 스칼라도 서에 대 한 스칼라 자습서는 웹 자습서 읽을 수 있습니다.
이 문서 3 스칼라 스파크 프로그래밍 예제, WordCount, TOPK 및 Sparkjoin를 대표 하는 불꽃의 세 가지 일반적인 응용 프로그램 소개 합니다.
1. WordCount 프로그래밍 예제
WordCount 분산된 응용 프로그램의 간단한 예제 중 하나입니다, 그리고 주요 기능은 입력된 디렉터리에서 모든 단어의 총 수를 계산 하 고 다음 단계를 작성 하는 것입니다.
1 단계:
4 개의 매개 변수는 Sparkcontext 개체를 만듭니다: 스파크 마스터 위치, 응용 프로그램 이름, 스파크 설치 디렉터리 및 병 저장 위치, 원사에 스파크, 처음 두 개의 매개 변수는 가장 중요 한로 " 원사 독립 실행형 ", 두 번째 매개 변수는 사용자 지정 문자열 예:
발 sc = 새로운 Sparkcontext (args (0), "WordCount",
System.getenv ("Spark_home"), Seq (System.getenv ("Spark_test_jar"))
2 단계:
입력된 데이터를 읽습니다. 텍스트에서에서 데이터를 읽기는 HDFs, Sparkcontext, 예를 들어 Hadoop에 Textinputformat 구문 분석 입력된 데이터를 사용 하 여 텍스트 함수를 사용 하는 RDD에 입력된 파일을 변환할 수 있습니다.
발 텍스트 = Sc.textfile (args (1))
물론, 스파크를 사용 하면 모든 Hadoop inputformat 이진 입력된 형식 Sequencefileinputformat, 어느 시점에서 작업할 수 있습니다 Sparkcontext에서 Hadooprdd 함수 예 등을 사용할 수 있습니다.
발 inputformatclass = Classof [sequencefileinputformat [텍스트, 텍스트]]
var Hadooprdd = Sc.hadooprdd (회의 Inputformatclass, Classof [텍스트], Classof[text])
또는 직접 Hadooprdd 개체를 만들:
var Hadooprdd = 새로운 Hadooprdd (사우스 캐롤라이나, 회의
Classof [sequencefileinputformat [텍스트, 텍스트, Classof [텍스트], Classof [텍스트]
3 단계:
RDD 변환 연산자 및 변환 rdd, 의해 WordCount, 먼저 해야 입력된 데이터의 각 줄에서 단어를 밖으로 구문 분석 하 고 다음, 양동이에 같은 단어를 넣어 하 고 다음 예를 들어 각 양동이에 각 단어의 빈도 계산:
발 결과 = hadooprdd.flatmap 없음;
케이스 (키, 값) = > value.tostring (). 분할 ("\\s+");
}.map (단어 = > (단어, 1)). Reducebykey (_ + _)
Flatmap 함수 여러 레코드에는 레코드를 변환 (한 대 다 관계), map 함수 변환 레코드를 다른 레코드 (일대일 관계), 및 Reducebykey 함수 양동이에 동일한 데이터를 분할 하 고 주요 단위로 계산. 이 함수들의 구체적인 의미를 참조할 수 있습니다: 변화를 촉발.
4 단계:
결과 RDD dataset는 HDFs에 저장합니다. Sparkcontext에는 Saveastextfile를 사용 하 여 HDFs 디렉토리, Hadoop에서 제공 하는 Textoutputformat 기본 데이터 집합을 저장 하 고 "(키, 값)" 형태로 각 레코드를 출력할 수 있습니다. 또한 예를 들면 sequencefile 형식과 등으로 데이터를 저장 하려면 Saveassequencefile 함수를 사용할 수 있습니다.
Result.saveassequencefile (args (2))
물론, 우리가 쓸 때 스파크 프로그램, 다음 두 개의 헤더 파일을 포함 시켜야:
가져오기 Org.apache.spark._
Sparkcontext 가져오기. _
WordCount 완전 한 프로그램에서 소개 되는 "아파치 스파크 학습: 이클립스 스파크 통합된 개발 환경을 사용 하 여" 시간에 대해 설명 하지는.
참고는 입력된 출력 파일을 지정 해야 입력된 디렉터리 같은 HDFs의 URI를 지정 하는 hdfs://hadoop-test/tmp/input, 출력 디렉터리는 hdfs://hadoop-test/tmp/output, 곳에, "HDFs : //hadoop-test "지정 됩니다 코어 site.xml 매개 변수 구성 대체 하 둡 구성 파일에서 Fs.default.name에 의해."
2. TOPK 프로그래밍 예제
TOPK 프로그램의 작업은 텍스트의 스택의 주파수를 계산 하 여 가장 빈번한 k-단어를 반환 것입니다. 두 가지 작업을 작성 해야 MapReduce로 구현 하는 경우: WordCount 및 TOPK, 그리고 어디 wordcount 부분 앞에 의해 구현 되었습니다, 한 일, 점화 하 고 다음 최고 K. 찾을 이전 구현에 따라 Note이 문서의 구현 최적입니다, 많은 개선의 여지가 있다.
1 단계:
먼저 다음과 같이 단어 빈도 따라 모든 단어를 정렬 해야 합니다.
발 정렬 없음; Result.map =
(키, 값)의 경우 = > (값, 키); 교환 키 및 값
}.sortbykey (true, 1)
2 단계: 첫 번째 k: 반환
발 topk = Sorted.top (args (3). ToInt)
3 단계: 인쇄 된 단어:
Topk.foreach (println)
참고 응용 프로그램 표준 출력의 콘텐츠에 대 한 원사 컨테이너 stdout 로그에 저장 됩니다. 원사,의 처음 두 표준 출력에 저장 됩니다, 각 컨테이너, 각각 stdout, stderr, 및 Syslog, 3 개의 로그 파일 하 고 세 번째는 log4j 인쇄 로그만 세 번째 로그 내용으로 일반적으로.
이 프로그램, 컴파일된 jar 패키지 및 실행된 스크립트의 전체 코드는 여기에서 다운로드할 수 있습니다. 다운로드 후, 따라는 "아파치 스파크 학습: 이클립스를 사용 하 여 스파크 통합된 개발 환경 구축" 프로세스 실행 하.
3. Sparkjoin 프로그래밍 예제
권장된 필드에는 잘 알려진 오픈 테스트 집합은 movielens, 다운로드 링크: http://grouplens.org/datasets/movielens/, 테스트 세트 포함 3 파일, 각각, Ratings.dat, Sers.dat Movies.dat, 특정 읽기: README.txt,이 섹션 Sparkjoin 인스턴스는 데이터 집합을 사용 하 여 Ratings.dat와 Movies.dat 두 개의 파일을 연결 하 여 이상 4.0의 평균 점수를 가진 영화의 목록을 가져옵니다: Ml-1 m. 프로그램 코드는 다음과 같습니다.
가져오기 Org.apache.spark._
Sparkcontext 가져오기. _
개체 Sparkjoin 없음
데 프 주 (args:array[string]) 없음
경우 (args.length!= 4) 없음
println ("사용은 Org.test.WordCount")
반환
}
발 sc = 새로운 Sparkcontext (args (0), "WordCount",
System.getenv ("Spark_home"), Seq (System.getenv ("Spark_test_jar"))
HDFS 파일에서 읽기 평가
발 텍스트 = Sc.textfile (args (1))
추출 (MovieID, 등급)
발 등급 = Textfile.map (라인 = > 없음
발 fileds = Line.split (":")
(Fileds (1). ToInt Fileds (2). ToDouble)
})
발 Moviescores 등급 =
. Groupbykey)
. 지도 (데이터 = > 없음
발 평균 = data._2.sum/data._2.size
(Data._1, 평균)
})
HDFS 파일에서 읽기 영화
발 영화 Sc.textfile (args (2)) =
발 movieskey = Movies.map (라인 = > 없음
발 fileds = Line.split (":")
(fileds (0). ToInt Fileds (1))
}). keyby (교 미 = > tup._1)
조인, 우리가 얻을 < 영화, moviename = "averagerating, =" >
발 결과 = Moviescores
. keyby (교 미 = > tup._1)
. 가입 (Movieskey)
. 필터 (f = > f._2._1._2 > 4.0)
. 지도 (f = > (F._1, f._2._1._2, f._2._2._2))
Result.saveastextfile (args (3))
}
}
당신은 수 코드를 다운로드, jar 패키지 컴파일하고 여기에서 스크립트를 실행 합니다.
이 프로그램을 직접 사용 스파크 쓰기 몇 가지 문제가, 상어는 스파크 하이브 대화형 쿼리 엔진, 특정 참조와 유사한 기반 상어 HQL 구현에 직접 작성할 수 있습니다: 상어.
4입니다. 요약
스파크 프로그래밍은 매우 스칼라 언어에 대 한 요구, 마찬가지로 Hadoop 프로그래밍 매우 자바 언어에서 요구 하는 만큼 가장 기본적인 구문을 작성 프로그램, 그리고 거기 몇 가지 일반적인 구문 및 식. 일반적으로, 프로그램 단지 스칼라, 자바, 그리고 Python 3 언어 인스턴스를 포함 한 공식적인 예제에서 모델링 하기 시작 했다.