스파크 운영자의 분류
일반적인 관점에서, 스파크 운영자는 대략 다음 두 가지 범주로 나눌 수 있습니다.
1) 변환 변환/변환 연산자 :이 변환은 작업 제출을 유발하지 않고 작업의 중간 프로세스 처리를 완료합니다.
변환 작업은 계산이 지연되므로 하나의 RDD 변환으로부터 다른 RDD를 생성하기위한 변환 작업이 즉시 실행되지 않음을 의미합니다. 작업이 트리거되기 전에 작업 작업을 사용할 때까지 대기해야합니다.
2) 액션 작업 연산자 :이 유형의 운영자는 SparkContext를 트리거하여 작업을 제출합니다.
작업 연산자는 Spark Submission 작업 (작업)을 트리거하고 데이터를 Spark 시스템에 출력합니다.
작은 관점에서, 스파크 연산자는 대략 다음 세 가지 범주로 나눌 수 있습니다.
1) 값 데이터 유형의 변환 연산자. 이 변형은 작업 제출을 유발하지 않습니다. 처리 된 데이터 항목은 값 유형 데이터입니다.
2) 키 값 데이터 유형의 트랜스 프롬화 연산자. 이 변형은 작업 제출을 유발하지 않습니다. 처리를위한 데이터 항목은 키 가치 데이터 쌍입니다.
3) 액션 연산자,이 유형의 운영자는 SparkContext를 트리거하여 작업을 제출합니다.
소개
일반적으로 Scala로 Spark 프로그램을 작성하는 것이 더 편리합니다. 결국 Spark의 소스 코드는 Scala로 작성됩니다. 그러나 현재 데이터 도킹 및 온라인 서비스는 현재 많은 Java 개발자가 있습니다. 현재 Java에서 Spark를 사용하는 몇 가지 방법을 마스터해야합니다.
1.지도
데이터를 처리하고 변환 할 때 맵을 더 자주 사용할 수 없습니다.
맵을 사용하기 전에 먼저 변환 된 함수 형식을 다음과 같이 정의해야합니다.
function <string, labeledpoint> transform = new 함수 <string, labeledpoint> () {// string은 특정 줄의 입력 유형입니다. 레이블 드레인드 포인트는 변환 된 출력 유형 @override public raildedpoint call (string row) 예외 {// 호출 메소드 문자열을 다시 작성합니다 [] rowarr = row.split ( ","); int rowsize = rowarr.length; Double [] DoubleArr = New Double [Rowsize-1]; // 첫 번째 lable을 제외하고, 나머지 부분은 더블로 구문 분석되고 (int i = 1; i <rowsize; i ++) {string eark = rowarr [i]; Doublearr [i] = double.parsedouble (각); } // 방금 얻은 데이터를 벡터 벡터 기능 = Vectors.dense (Doublearr)로 변환합니다. 더블 레이블 = double.parsedouble (Rowarr [0]); // 분류 훈련에 대한 데이터 형식 구성 레이블 포인트 ppoint point = new labeledpoint (레이블, 기능); 반환 지점; }};특별한주의를 기울여야합니다.
1. 호출 메소드의 입력은 변환 전에 데이터 행의 유형이어야합니다. 리턴 값은 처리 후 데이터 행의 유형이어야합니다.
2. 전환 메소드에서 사용자 정의 클래스가 호출되면 클래스 이름을 직렬화해야합니다.
공개 클래스 Treeensemble은 직렬화 가능 {}를 구현합니다.3. 전환 함수에서 일부 클래스 객체가 호출되는 경우 방법이 외부 매개 변수 또는 숫자 처리 모델 (표준화, 정규화 등)을 호출 해야하는 경우 객체는 최종적으로 선언해야합니다.
그런 다음 적절한 경우 변환 기능을 호출하십시오
javardd <labeledpoint> rdd = oridata.tojavardd (). map (transform);
이 방법을 사용하려면 일반 RDD를 Javardd로 변환해야합니다. Javardd로 변환하는 작업은 시간이 소요되지 않으므로 걱정하지 마십시오.
2. 필터
또한 데이터 널 값을 피하는 것과 같은 시나리오에서 매우 일반적으로 사용되며 SQL의 위치의 기능을 충족 할 수 있습니다.
우선, 우리는 함수를 정의해야합니다. 데이터 라인이 주어진 부울 값을 반환하는 실제 효과는 TRUE로 반환 된 데이터를 유지하는 것입니다.
function <string, boolean> boolofilter = new function <string, boolean> () {// String은 특정 줄의 입력 유형입니다. 부울은 해당 출력 유형입니다. 데이터가 유지되는지 여부를 결정하는 데 사용됩니다. @override public boolean call (string row) 예외 {// 호출 메소드를 다시 작성하십시오 boolean flag = row! = null; 리턴 플래그; }};일반적 으로이 함수의 실제 사용에서 수정해야 할 것은 행 유형, 즉 데이터 행의 입력 유형 일뿐입니다. 위의 전환 함수와 달리이 호출 방법의 반환 값은 부울로 고정되어야합니다.
그런 다음 호출 방법
javardd <labeledpoint> rdd = oridata.tojavardd (). filter (boolfilter);
3. Maptopair
이 방법은 MAP 메소드와 다소 유사하며 데이터로 일부 변환을 수행합니다. 그러나이 함수의 출력은 튜플 입력 라인입니다. 가장 일반적으로 사용되는 방법은 교차 검증 또는 통계 오류율 리콜 계산 AUC 등을 수행하는 것입니다.
마찬가지로 먼저 변환 기능을 정의해야합니다
function <string, boolean> transformer = new Pairfunction <labeledpoint, object, object> () {// labeledpoint는 입력 유형의 두 객체입니다. @override public tuple2 call (labeledpoint row)을 선택하지 마십시오. 예외 {// 호출 메소드를 다시 작성하십시오. 일반적으로 입력 매개 변수와 출력 만 변경하십시오. Double Predicton을 변경하지 마십시오 = thismodel.predict (row.features ()); 이중 레이블 = row.label (); New Tuple2 (예측, 레이블)를 반환합니다. }});호출 클래스 및 클래스 객체와 관련하여 요구 사항은 이전 객체와 일치합니다. 클래스는 직렬화되어야하며 클래스 객체는 최종 유형으로 선언해야합니다.
해당 통화는 다음과 같습니다.
javapairrdd <객체, 객체> predictionsandlabels = oridata.maptopair (변압기);
그런 다음 예측 및 표시를 사용하려면 정확도, 리콜, 정확도 및 AUC를 계산하십시오. 다음 블로그에있을 것입니다. 계속 지켜봐주세요.
요약
위는이 기사의 전체 내용입니다. 이 기사의 내용에 모든 사람의 연구 나 작업에 대한 특정 참조 가치가 있기를 바랍니다. 궁금한 점이 있으면 의사 소통을 위해 메시지를 남길 수 있습니다. Wulin.com을 지원 해주셔서 감사합니다.