Преобразуйте список scala с парами ключевых значений в фрейм данных Spark, используя только значения - PullRequest
0 голосов
/ 12 июля 2020

Я новичок в Scala и Spark, и я пытаюсь превратить список в формате [key: string, value: string] во фрейм данных Spark.

Список выглядит примерно так: (key, [{"field1": "value1", "field2": "value2"}]) `

Я хотел бы превратить его во фрейм данных, который выглядит примерно так

+------+------+
|field1|field2|
+------+------+
|value1|value2|
+------+------+

Любая помощь приветствуется.

1 Ответ

1 голос
/ 12 июля 2020

Проверьте код ниже.

value как String

scala> val df = Seq(("key","""[{"field1": "value1", "field2": "value2"}]""")).toDF("key","value")
df: org.apache.spark.sql.DataFrame = [key: string, value: string]

scala> import org.apache.spark.sql.types._
import org.apache.spark.sql.types._

scala> val schema = ArrayType(MapType(StringType,StringType))
schema: org.apache.spark.sql.types.ArrayType = ArrayType(MapType(StringType,StringType,true),true)

scala> df.select($"key",explode(from_json($"value",schema)).as("value")).select($"value"("field1").as("field1"),$"value"("field2").as("field2")).show(false)
+------+------+
|field1|field2|
+------+------+
|value1|value2|
+------+------+

value как Map

scala> val df = Seq(("key",Seq(Map("field1" -> "value1","field2" -> "value2")))).toDF("key","value")
df: org.apache.spark.sql.DataFrame = [key: string, value: array<map<string,string>>]

scala> df.select($"key",explode($"value").as("value")).select($"value"("field1").as("field1"),$"value"("field2").as("field2")).show(false)
+------+------+
|field1|field2|
+------+------+
|value1|value2|
+------+------+
...