Buscar..


Mapeo de JSON a una clase personalizada con Gson

Con Gson , puede leer el conjunto de datos JSON y asignarlos a una clase personalizada MyClass .

Como Gson no es serializable, cada ejecutor necesita su propio objeto Gson . Además, MyClass debe ser serializable para pasarlo entre los ejecutores.

Tenga en cuenta que el archivo (s) que se ofrece como un archivo json no es un archivo JSON típico. Cada línea debe contener un objeto JSON válido independiente y autónomo. Como consecuencia, un archivo JSON multilínea regular fallará con mayor frecuencia.

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

Si la creación del objeto Gson resulta demasiado costosa, se puede utilizar el método mapPartitions para optimizarlo. Con él, habrá un Gson por partición en lugar de por línea:

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
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow