Leer Json de cadena de texto
Ejemplo simple de lectura de Json a partir de una cadena de texto
val events = sc.parallelize( """ [{"accion":"create","tiempo":"2018-08-07T00:01:17Z"}, {"accion":"create","tiempo":"2018-08-07T00:01:17Z"}] """ :: Nil) val df = sqlContext.read.json(events) df.printSchema() df.show()
root |-- accion: string (nullable = true) |-- tiempo: string (nullable = true) +------+--------------------+ |accion| tiempo| +------+--------------------+ |create|2018-08-07T00:01:17Z| |create|2018-08-07T00:01:17Z| +------+--------------------+
Leer Json de cadena de texto autodefiniendo la estructura
Ejemplo simple de lectura de Json a partir de una cadena de texto autodefiniendo la estructura
val events = sc.parallelize( """ [{"accion":"create","tiempo":"2018-08-07T00:01:17Z"}, {"accion":"create","tiempo":"2018-08-07T00:01:17Z"}] """ :: Nil) import org.apache.spark.sql.types.{DataType, StructType} // Leer el esquema del Json val schema_json=spark.read.json(events).schema.json // Añadir el esquema val schema=DataType.fromJson(schema_json).asInstanceOf[StructType] // Leer el Json usando el esquema val df=spark.read.schema(schema).json(events) df.printSchema() df.show()
Leer Json de cadena de texto definiendo la estructura
Ejemplo simple de lectura de Json a partir de una cadena de texto definiendo la estructura
import org.apache.spark.sql.types._ val events = sc.parallelize( """ [{"accion":"create","evento":{"tipo":1,"tiempo":"2018-08-07T00:01:17Z"}}, {"accion":"create","evento":{"tipo":1,"tiempo":"2018-08-07T00:01:17Z"}}] """ :: Nil) val schema = (new StructType) .add("accion", StringType) .add("evento", (new StructType) .add("tipo", LongType) .add("tiempo", StringType) ) // Leer el Json usando el esquema val df=spark.read.schema(schema).json(events) df.printSchema() df.show() df.select($"evento.*").show()
root |-- accion: string (nullable = true) |-- evento: struct (nullable = true) | |-- tipo: long (nullable = true) | |-- tiempo: string (nullable = true) +------+--------------------+ |accion| evento| +------+--------------------+ |create|[1, 2018-08-07T00...| |create|[1, 2018-08-07T00...| +------+--------------------+ +----+--------------------+ |tipo| tiempo| +----+--------------------+ | 1|2018-08-07T00:01:17Z| | 1|2018-08-07T00:01:17Z| +----+--------------------+
Leer Json de HDFS
El fichero prueba1.json contiene exactamente el texto contenido entre tiples comillas en el anterior ejemplo, es decir:
prueba1.json
[{"accion":"create","evento":{"tipo":1,"tiempo":"2018-08-07T00:01:17Z"}}, {"accion":"create","evento":{"tipo":1,"tiempo":"2018-08-07T00:01:17Z"}}]
Una vez definido el contenido se especifica como leer este fichero HDFS:
val df = spark.read.json(spark.sparkContext.wholeTextFiles("/pruebas/prueba1.json").values) df.printSchema() df.select($"evento.*").show()
root |-- accion: string (nullable = true) |-- evento: struct (nullable = true) | |-- tipo: long (nullable = true) | |-- tiempo: string (nullable = true) +----+--------------------+ |tipo| tiempo| +----+--------------------+ | 1|2018-08-07T00:01:17Z| | 1|2018-08-07T00:01:17Z| +----+--------------------+
Buenos dias, tengo un json un poco extraño y me gustaría saber como procesarlo. Te podría mandar el json y me comentas como procesarlo?