Я сталкиваюсь с тем, что, я думаю, является основной проблемой, но мне на удивление трудно найти правильный ответ. Может быть, я плохо искал, и это дубликат, я заранее извиняюсь.
Работа, которую я пытаюсь сделать, проста: прочитать json и преобразовать его в паркет.
df = spark.read.json("path/to/json")
df.write.mode("append").format("parquet").saveAsTable("sc_raw_report")
У меня были существующие файлы паркета из предыдущих заданий, и я создал для них метастову куста.
spark.read.parquet("{}/{}".format("test-data/comparaison", "sc_raw_report")) \
.createOrReplaceTempView("{}_tmp".format("sc_raw_report"))
spark.sql("CREATE TABLE IF NOT EXISTS {0} LIKE {0}_tmp LOCATION '{1}/{0}'".format("sc_raw_report", "test-data/comparaison/parquet"))
spark.sql("DESC {}".format("sc_raw_report"))
Теперь я хочу продолжить обработку необработанного json, преобразовать его в паркет и добавить в эту таблицу улья. Но в сыром json иногда могут отсутствовать данные (столбцы), и когда я пытаюсь сделать «saveAsTAble», я нажимаю «ошибка номера столбца [...] не соответствует схеме данных».
Таким образом, мне интересно, как я могу загрузить из json, а затем сохранить как паркет, следуя существующей схеме? Нужно ли вручную сравнивать столбцы (некоторые вложенные) и создавать их с помощью процесса .withColumn (col, fn.lit (None))? Или может спарк автоматически сгенерировать недостающие столбцы и установить их в ноль?