Scala/Spark确定外部路径table

Scala/Spark determine the path of external table

我在 gs 存储桶上有一个外部 table 并执行一些压缩逻辑,我想确定创建 table 的完整路径。

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 中确定 table 路径,请告诉我。

我想你可以使用 .inputFiles

Returns a best-effort snapshot of the files that compose this Dataset

请注意,此 returns 是一个 Array[String],因此您应该遍历它以获取您要查找的所有信息。

所以实际上只需调用

compactionTable.inputFiles

并查看数组的每个元素

您可以使用 SQL 命令 SHOW CREATE TABLE <tablename>DESCRIBE FORMATTED <tablename>。两者都应该 return 外部 table 的 location,但他们需要一些逻辑来提取此路径...

另见

正确答案如下:


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

lazy val s3location: String = tblMetadata.location.getPath

使用DESCRIBE FORMATTED SQL命令收集回驱动程序的路径。

在 Scala 中:

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

同Python:

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