1
votes

Scala / Spark déterminent le chemin de la table externe

J'ai une table externe sur le bucket gs et pour faire une logique de compactage, je veux déterminer le chemin complet sur lequel la table est créée.

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>

Faites-moi savoir si quelqu'un sait comment déterminer le chemin de la table dans scala.


0 commentaires

4 Réponses :


3
votes

Je pense que vous pouvez utiliser .inputFiles à

Renvoie un instantané au mieux des fichiers qui composent cet ensemble de données

Sachez que cela renvoie un Array [String] , vous devriez donc le parcourir pour obtenir toutes les informations que vous recherchez.

Donc en fait il suffit d'appeler

compactionTable.inputFiles

et de regarder chaque élément du tableau


0 commentaires

0
votes

Vous pouvez utiliser les commandes SQL SHOW CREATE TABLE ou DESCRIBE FORMATTED . Les deux doivent renvoyer le location de la table externe, mais ils ont besoin d'une logique pour extraire ce chemin ...

Voir aussi Comment obtenir la valeur de l'emplacement d'une table Hive à l'aide d'un objet Spark?


0 commentaires

1
votes

Voici la bonne réponse:

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

lazy val s3location: String = tblMetadata.location.getPath


0 commentaires

0
votes

Utilisez la commande SQL DESCRIBE FORMATTED et récupérez le chemin vers le pilote.

Dans Scala:

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

La même chose en Python :

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


0 commentaires