Spłaszczanie wierszy w Iskrze

Przeprowadzam testy na spark przy użyciu Scali. Zwykle czytamy pliki json, które należy manipulować, jak w poniższym przykładzie:

Test.json:

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

Jak mogę przekonwertować go do następującego formatu:

{"a":1,"b":2}
{"a":1,"b":3}
Author: gsamaras, 2015-10-02

1 answers

Możesz użyć explode funkcji:

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
Author: zero323,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-10-02 13:45:00