Aplatir les rangées dans Spark

Je fais des tests pour spark en utilisant scala. Nous lisons généralement les fichiers json qui doivent être manipulés comme l'exemple suivant:

Test.json:

{"a":1,"b":[2,3]}
val test = sqlContext.read.json("test.json")

Comment puis-je le convertir au format suivant:

{"a":1,"b":2}
{"a":1,"b":3}
23
demandé sur gsamaras 2015-10-02 14:53:51

1 réponses

Vous pouvez utiliser la fonction explode:

scala> import org.apache.spark.sql.functions.explode
import org.apache.spark.sql.functions.explode


scala> val test = sqlContext.read.json(sc.parallelize(Seq("""{"a":1,"b":[2,3]}""")))
test: org.apache.spark.sql.DataFrame = [a: bigint, b: array<bigint>]

scala> test.printSchema
root
 |-- a: long (nullable = true)
 |-- b: array (nullable = true)
 |    |-- element: long (containsNull = true)

scala> val flattened = test.withColumn("b", explode($"b"))
flattened: org.apache.spark.sql.DataFrame = [a: bigint, b: bigint]

scala> flattened.printSchema
root
 |-- a: long (nullable = true)
 |-- b: long (nullable = true)

scala> flattened.show
+---+---+
|  a|  b|
+---+---+
|  1|  2|
|  1|  3|
+---+---+
40
répondu zero323 2015-10-02 13:45:00