2017-03-24 7 views
1

이 게시물을 읽은 적이 있습니다. https://spark.apache.org/docs/latest/programming-guide.html (스파크를 전달하는 기능 참조)하지만 내 사례 클래스는 내 사례 클래스와 함께 유형이 지정된 데이터 집합을 사용하고 있습니다. 싱글 톤 객체를 사용하여 매핑 방법을 유지하려고합니다. 나는 나의 무대를위한 성능을 최적화하기 위해 필요한 기능을 패키지화하는 최선의 방법 (한 유형에서 다른 유형으로 데이터 집합을 변형하고 마루에 쓴다)에 대해 궁금하다.데이터 세트, 대형 자바 클래스 및 싱글 톤을 사용할 때 스파크 통과 함수

현재 스테이지 단계는 약 3 백만 행 (~ 1.5 시간) 동안 엄청나게 오랜 시간이 걸리고 있으며, 약 880MB의 데이터가 s3의 마루로 출력됩니다.

min executors = 3, max executors = 10, 각 실행 프로그램에서 4 코어, 드라이버 메모리 8GB를 사용하는 클러스터 모드에서 실행 중입니다.

-

높은 수준의 코딩 부분 : 나는 다른 경우 클래스 C2 한 경우 클래스 C1을 매핑하고

. C1 및 C2에는 java.sql.Timestamp, Option [String] Option [Int], String, Int, BigInt와 같이 다양한 유형의 약 16 개의 필드가 있습니다. C1 C2 행으로부터 맵핑하려면

case class C1(field1 : _, field2 : _, field3 : _, ...) 
case class C2(field1 : _, field2 : _, field3 : _, ...) 

가 나는 https://github.com/drtimcooper/LatLongToTimezone부터 복사 된 대형 자바 클래스 J의 기능 (정적 메소드) 필요가있다.

public class J { 
    public static String getValue((float) v) = ... 
}  

필자는 Util이라는 util 클래스 내에 매핑 함수를 작성했습니다. Util에는 매핑 함수에서 호출되는 다른 많은 유용한 함수가 있습니다.

는 =========

는 기본적으로 내 코드의 흐름은 다음과 같습니다

case class C1(field1 : _, field2 : _, field3 : _, ...) 
case class C2(field1 : _, field2 : _, field3 : _, ...) 

// very large java class J that only contains static methods 
public class J { 
    public static String getValue((float) v) = ... 

    ... 
}  

object Util { 
    def m1(i: Int): Int = ... 

    def m2(l: Option[BigDecimal], l2: Option[BigDecimal]): Int = { 
     J.getValue(l.get, l2.get) 
    } 

    ... 

    def convert_C1_to_C2(c1: C1): C2 = { 
    C2(
     field1 = m1(c1.field1), 
     field2 = m2(c1.field2, c1.field3), 
     ... 
    } 
} 

dataframe.as[C1].map(Util.convert_C1_to_C2) 
    .mode(SaveMode.Overwrite) 
    .parquet("s3a://s3Path") 

이 쓸 수있는보다 최적의 방법이 있나요? 아니면 내가 이런 짓을 한 것처럼 눈부신 오류를 지적 할 수 있습니까? 내 코드를 보면 왜 작업을 마칠 때까지 오랜 시간이 걸릴지 잘 모르겠습니다.

나는 이미 s3에서 파일의 양을 줄이기 위해 16 개의 파티션을 말하려했지만, 이것은 작업을 훨씬 느리게 진행시키는 것으로 보인다. 일반적으로 병합이없는 64 개의 파티션이 있습니다.

답변

0

방금 ​​elsewhere에 해당하는 느린 가짜 -s3 이름 바꾸기 문제가 발생했습니다. 거기서 몇 가지 수정 사항이 논의됩니다.