#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|
--- ------------------------------------------------------------------------- ------------ ---------- -------------------