Scala/Spark определяют путь к внешней таблице

У меня есть одна внешняя таблица в ведре gs, и для выполнения некоторой логики уплотнения я хочу определить полный путь, на котором создается таблица.

val tableName="stock_ticks_cow_part"
val primaryKey="key"
val versionPartition="version"
val datePartition="dt"
val datePartitionCol=new org.apache.spark.sql.ColumnName(datePartition)

import spark.implicits._

val compactionTable = spark.table(tableName).withColumnRenamed(versionPartition, "compaction_version").withColumnRenamed(datePartition, "date_key")
compactionTable. <code for determining the path>

Дайте мне знать, если кто-нибудь знает, как определить путь к таблице в scala.


person shiv    schedule 08.03.2019    source источник


Ответы (4)


Я думаю, вы можете использовать .inputFiles на

Возвращает снимок файлов, из которых состоит этот набор данных.

Имейте в виду, что это возвращает Array[String], поэтому вам следует просмотреть его, чтобы получить всю информацию, которую вы ищете.

Так что на самом деле просто позвоните

compactionTable.inputFiles

и посмотрите на каждый элемент массива

person Tizianoreica    schedule 08.03.2019

Вот правильный ответ:


import org.apache.spark.sql.catalyst.TableIdentifier
lazy val tblMetadata = catalog.getTableMetadata(new TableIdentifier(tableName,Some(schema)))

lazy val s3location: String = tblMetadata.location.getPath
person Guillaume    schedule 07.05.2019

Вы можете использовать команды SQL SHOW CREATE TABLE <tablename> или DESCRIBE FORMATTED <tablename>. Оба должны вернуть location внешней таблицы, но им нужна некоторая логика для извлечения этого пути...

См. также Как получить значение местоположения для таблицы Hive с помощью объекта Spark?

person Raphael Roth    schedule 08.03.2019

Используйте команду DESCRIBE FORMATTED SQL и соберите путь обратно к драйверу.

В Скала:

val location = spark.sql("DESCRIBE FORMATTED table_name").filter("col_name = 'Location'").select("data_type").head().getString(0)

То же самое в Питоне:

location = spark.sql("DESCRIBE FORMATTED table_name").filter("col_name = 'Location'").select("data_type").head()[0]
person zoltanctoth    schedule 28.08.2020