Используйте from_json () в Scala для анализа нескольких строк в DataFrame - PullRequest
0 голосов
/ 24 мая 2018

У меня есть JSON в столбце Spark DataFrame следующим образом:

ID|           Text|           JSON
------------------------------------------------------------------------------
1|             xyz|          [{"Hour": 1, "Total": 10, "Fail": 1}, {"Hour": 2, "Total": 40, "Fail": 4}, {"Hour": 3, "Total": 20, "Fail": 2}]

Я использую следующую схему

val schema = StructType(Array(StructField("Hour", IntegerType),
   StructField("Total", IntegerType), StructField("Fail", IntegerType))

Я использую следующий код для анализаDataFrame и вывод JSON в виде нескольких столбцов

val newDF = DF.withColumn("JSON", from_json(col("JSON"), schema)).select(col("JSON.*"))
newDF.show()

Приведенный выше код просто анализирует одну запись из JSON.Но я хочу, чтобы он проанализировал все записи в JSON.

Вывод выглядит следующим образом:

Hour|       Total|       Fail|
-------------------------------
   1|          10|          1|
-------------------------------

Но я хочу, чтобы вывод был следующим:

Hour|       Total|       Fail|
-------------------------------
   1|          10|          1|
   2|          40|          4|
   3|          20|          2|
-------------------------------

Может кто-то, пожалуйста, дайте мне знать.Что мне не хватает !!

Заранее спасибо.

1 Ответ

0 голосов
/ 24 мая 2018

Если я правильно интерпретирую ваши образцы данных, ваш столбец JSON представляет собой последовательность элементов JSON с вашей опубликованной схемой.Вам нужно будет взорвать столбец перед применением from_json следующим образом:

val df = Seq(
  (1, "xyz", Seq("""{"Hour": 1, "Total": 10, "Fail": 1}""",
                 """{"Hour": 2, "Total": 40, "Fail": 4}""",
                 """{"Hour": 3, "Total": 20, "Fail": 2}""")
  )).toDF("ID", "Text", "JSON")

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

val jsonSchema = StructType(Array(
  StructField("Hour", IntegerType),
  StructField("Total", IntegerType),
  StructField("Fail", IntegerType)
))

df.
  withColumn("JSON", explode(col("JSON"))).
  withColumn("JSON", from_json(col("JSON"), jsonSchema)).
  select("JSON.*").
  show
// +----+-----+----+
// |Hour|Total|Fail|
// +----+-----+----+
// |   1|   10|   1|
// |   2|   40|   4|
// |   3|   20|   2|
// +----+-----+----+
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...