explode () из pyspark. sql не работает должным образом, даже если только одна запись не соответствует схеме - PullRequest
0 голосов
/ 21 июня 2020

У меня есть файл json, который я хотел бы преобразовать (например, csv), развернув одно из полей в столбцы. Я использовал для этого explode (), но он выдает ошибку, даже если одна из многих записей не имеет точной схемы.

Входной файл:

{"place": "KA" , "id": "200", "swversion": "v.002", "events": [{"time": "2020-05-23T22: 34: 32.770Z", "eid": 24, "app ":" testing "," state ": 0}]} {" place ":" AP "," id ":" 100 "," swversion ":" v.001 "," events ": [[]] }

В приведенном выше примере я хочу развернуть поля «событий», и они должны стать столбцами. В идеальном случае «события» представляют собой массив типа структуры.

Ожидаемые столбцы выходного файла:

* место, идентификатор, версия, время, идентификатор, приложение, состояние *

Для в этом случае я использовал explode (), доступный в pyspark. sql, но поскольку моя вторая запись во входном файле не соответствует схеме, в которой «events» является массивом типа структуры, explode () здесь не работает, давая ошибка.

Код, который я использовал для взрыва:

df = spark.read. json ("InputFile")

ndf = df.withColumn ("event ", explode (" events ")). drop (" events ")

ndf.select (" place "," id "," swversion "," event. * ")

Последняя строка не работает из-за второй записи в моем входном файле ..

Я считаю, что для explode () не должно быть слишком сложно справиться с этим. Можете ли вы подсказать, как избежать

Невозможно раскрыть типы звезд

1 Ответ

0 голосов
/ 21 июня 2020

Если я изменю «events»: [[]] на «events»: [{}], explode () будет работать нормально, поскольку снова это массив StructType, но поскольку я не могу контролировать входные данные, я нужно с этим справиться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...