Я использую искатель DataFrame Writer для записи данных во внутренние таблицы кустов в формате паркета в IBM Cloud Object Storage.Итак, мое хранилище метаданных находится в кластере HDP, и я запускаю искровое задание из кластера HDP.Это искровое задание записывает данные в IBM COS в формате паркета.Вот как я запускаю сеанс spark
SparkSession session = SparkSession.builder().appName("ParquetReadWrite")
.config("hive.metastore.uris", "<thrift_url>")
.config("spark.sql.sources.bucketing.enabled", true)
.enableHiveSupport()
.master("yarn").getOrCreate();
session.sparkContext().hadoopConfiguration().set("fs.cos.mpcos.iam.api.key",credentials.get(ConnectionConstants.COS_APIKEY));
session.sparkContext().hadoopConfiguration().set("fs.cos.mpcos.iam.service.id",credentials.get(ConnectionConstants.COS_SERVICE_ID));
session.sparkContext().hadoopConfiguration().set("fs.cos.mpcos.endpoint",credentials.get(ConnectionConstants.COS_ENDPOINT));
Проблема, с которой я сталкиваюсь, заключается в том, что когда я разбиваю данные и сохраняю их (через partitionBy), я не могу получить доступ к данным напрямую из spark sql
spark.sql("select * from partitioned_table").show
Чтобы извлечь данные из секционированной таблицы, я должен загрузить фрейм данных и зарегистрировать его как временную таблицу, а затем запросить ее.Вышеуказанная проблема не возникает, когда таблица не разделена.Код для записи данных следующий:
dfWithSchema.orderBy(sortKey).write()
.partitionBy("somekey")
.mode("append")
.format("parquet")
.option("path",PARQUET_PATH+tableName )
.saveAsTable(tableName);
Есть идеи, почему подход с прямым запросом не работает для секционированных таблиц в COS / Parquet?