чтение в файлах json в Spark df с вложенными данными json PySpark

#json #apache-spark #pyspark

#json #apache-spark #pyspark

Вопрос:

Мне нужно прочитать несколько файлов JSON в spark df. Данные JSON выглядят следующим образом:

 {"f0_":{"id":"138307057680","ActionName":"Complete","Time":"2020-04-23-12:40:04"}}
{"f0_":{"id":"138313115245","ActionName":"Midpoint","Time":"2020-06-16-20:41:16"}}
  

Мне нужно избавиться от первого ключа, который содержит все столбцы в нем.
Я пытался:

 jsonFiles = spark.read.json("Resources") # path to all json files
jsonFile.printSchema()
  

Вывод:

 root
 |-- f0_: struct (nullable = true)
 |    |-- id string (nullable = true)
 |    |-- ActionName: string (nullable = true)
 |    |-- Time: string (nullable = true)
  

Комментарии:

1. Вы пытались select('f0_.*') ?

2. У меня нет. Каков синтаксис для select(f0_.*)?

3. Все фреймы данных имеют функцию выбора, как показано здесь spark.apache.org/docs/2.2.0 /…

4. Это сработало. Спасибо!

5. Подробнее об этом: docs.azuredatabricks.net/_static/notebooks /…

Ответ №1:

Это может быть рабочим решением для вас —-

# Создайте фрейм данных здесь

 df_new = spark.createDataFrame([(str({"f0_":{"id":"138307057680","ActionName":"Complete","Time":"2020-04-23-12:40:04"}})), (str({"f0_":{"id":"138313115245","ActionName":"Midpoint","Time":"2020-06-16-20:41:16"}}))],T.StringType())

df_new = df_new.withColumn('col', F.from_json("value",T.MapType(T.StringType(), T.StringType())))
df_new = df_new.select(F.explode("col").alias("x", "y"))


df_new = df_new.withColumn('y', F.from_json("y",T.MapType(T.StringType(), T.StringType())))

df_new = df_new.withColumn("id", df_new.y.getItem("id")).withColumn("ActionName", df_new.y.getItem("ActionName")).withColumn("Time", df_new.y.getItem("Time"))
df_new.show(truncate=False)
  

Вывод здесь

  --- ------------------------------------------------------------------------- ------------ ---------- ------------------- 
|x  |y                                                                        |id          |ActionName|Time               |
 --- ------------------------------------------------------------------------- ------------ ---------- ------------------- 
|f0_|[id -> 138307057680, ActionName -> Complete, Time -> 2020-04-23-12:40:04]|138307057680|Complete  |2020-04-23-12:40:04|
|f0_|[id -> 138313115245, ActionName -> Midpoint, Time -> 2020-06-16-20:41:16]|138313115245|Midpoint  |2020-06-16-20:41:16|
 --- ------------------------------------------------------------------------- ------------ ---------- -------------------