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?