pyspark (spark 2.4) + в кустарнике json отсутствуют столбцы по сравнению со схемой таблицы - PullRequest
0 голосов
/ 03 октября 2019

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

Работа, которую я пытаюсь сделать, проста: прочитать 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))? Или может спарк автоматически сгенерировать недостающие столбцы и установить их в ноль?

...