수색…


Gson을 사용하여 JSON을 사용자 정의 클래스에 매핑

Gson 사용하면 JSON 데이터 세트를 읽고 사용자 정의 클래스 인 MyClass 매핑 할 수 있습니다.

Gson 은 직렬화 할 수 없으므로 각 실행자는 자체 Gson 객체가 필요합니다. 또한, 집행자간에 전달하기 위해서는 MyClass 를 직렬화 할 수 있어야합니다.

json 파일로 제공되는 파일은 일반적인 JSON 파일이 아닙니다. 각 행에는 별도의 자체 포함 된 유효한 JSON 객체가 있어야합니다. 결과적으로 정규 멀티 라인 JSON 파일이 실패하는 경우가 많습니다.

val sc: org.apache.spark.SparkContext // An existing SparkContext

// A JSON dataset is pointed to by path.
// The path can be either a single text file or a directory storing text files.
val path = "path/to/my_class.json"
val linesRdd: RDD[String] = sc.textFile(path)

// Mapping json to MyClass
val myClassRdd: RDD[MyClass] = linesRdd.map{ l => 
    val gson = new com.google.gson.Gson()
    gson.fromJson(l, classOf[MyClass])
}

Gson 객체의 생성이 너무 mapPartitions 메소드를 사용하여 객체를 최적화 할 수 있습니다. 이 프로그램을 사용하면 라인 당 대신 파티션 당 Gson 이 하나씩 Gson .

val myClassRdd: RDD[MyClass] = linesRdd.mapPartitions{p => 
    val gson = new com.google.gson.Gson()
    p.map(l => gson.fromJson(l, classOf[MyClass]))
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow