Я пытаюсь создать внешнюю таблицу для чтения данных из многораздельных паркетных файлов в формате hdf. Для этого я сначала создаю внешнюю таблицу, используя эту строку:
spark.sql(
"CREATE EXTERNAL TABLE IF NOT EXISTS mydb.mytable (col1 int)\n" +
"PARTITIONED BY (yyyy int, mm int)\n" +
"STORED AS PARQUET\n" +
"LOCATION 'hdfs://group/poc/mydata'"
)
- это спарк SparkSession, созданный с этими двумя параметрами:
spark = SparkSession
.builder()
.enableHiveSupport()
.config(sparkConfigurations)
.getOrCreate()
def sparkConfigurations = {
cfg.set("hive.exec.dynamic.partition", "true")
cfg.set("hive.exec.dynamic.partition.mode", "nonrestrict")
}
А затем я пытаюсь вставить данные в эту таблицу из кадра данных:
df.write
.mode(SaveMode.Append)
.insertInto("mydb.mytable")
является df-кадром с той же схемой, что и таблица кустов.
Эта последняя вставка InIn вызывает ошибку NullPointerException, без дополнительной информации.
Хуже всего то, что, если я запускаю первый код CREATE EXTERNAL TABLE из куста, метод insertInto начинает работать хорошо.
PS: я не могу использовать метод saveAsTable, потому что я использую spark 2.1.0, и этот метод не поддерживается до версии 2.2.0.
Спасибо за вашу помощь.