Sök…


Kartlägga JSON till en anpassad klass med Gson

Med Gson kan du läsa JSON-datasätt och kartlägga dem till en anpassad klass MyClass .

Eftersom Gson inte kan serialiseras behöver varje exekutiv sitt eget Gson objekt. MyClass måste också vara seriellt för att kunna skicka det mellan körarna.

Observera att de filerna som erbjuds som en json-fil inte är en typisk JSON-fil. Varje rad måste innehålla ett separat, självständigt giltigt JSON-objekt. Som en konsekvens kommer en vanlig JSON-fil med flera linjer oftast att misslyckas.

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])
}

Om skapandet av Gson objekt blir för kostsamt mapPartitions metoden mapPartitions användas för att optimera det. Med det kommer det att finnas en Gson per partition istället för per rad:

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
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow