apache-spark
Manejo de JSON en Spark
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