У меня есть список вложенных словарей, например. ds = [{'a': {'b': {'c': 1}}}]
и хотите создать из него искра DataFrame, а вывести схему вложенных словарей. Использование sqlContext.createDataFrame(ds).printSchema()
дает мне следующую схемуСоздать Spark DataFrame из вложенного словаря
root
|-- a: map (nullable = true)
| |-- key: string
| |-- value: map (valueContainsNull = true)
| | |-- key: string
| | |-- value: long (valueContainsNull = true)
но то, что мне нужно это
root
|-- a: struct (nullable = true)
| |-- b: struct (nullable = true)
| | |-- c: long (nullable = true)
Вторая схема может быть создана первым преобразованием словарей в формат JSON, а затем загрузить его с jsonRDD
как этим sqlContext.jsonRDD(sc.parallelize([json.dumps(ds[0])])).printSchema()
. Но это было бы довольно громоздко для больших файлов.
Я думал о преобразовании словарей в объекты pyspark.sql.Row()
, надеясь, что dataframe выведет схему, но это не сработало, когда словари имели разные схемы (например, вначале отсутствовал какой-то ключ).
Есть ли другой способ сделать это? Благодаря!
Я хотел избежать этого (см мой вопрос). Я надеялся, что есть способ сделать это, не создавая RDD из словарей, чтобы получить его схему. – Marigold
Прошу прощения за ваш средний абзац. К сожалению, теперь функция «выводить схему из словаря» не рекомендуется, я надеюсь, что есть и другой способ. – hyim