1

我在 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 中的表路径,请告诉我。

4

4 回答 4

3

我想你可以.inputFiles

返回构成此数据集的文件的尽力而为的快照

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

所以实际上只是打电话

compactionTable.inputFiles

并查看数组的每个元素

于 2019-03-08T07:39:51.457 回答
1

以下是正确答案:


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

lazy val s3location: String = tblMetadata.location.getPath
于 2019-05-07T02:23:13.737 回答
0

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

另请参阅如何使用 Spark 对象获取 Hive 表的位置值?

于 2019-03-08T15:40:19.260 回答
0

使用DESCRIBE FORMATTEDSQL 命令并收集返回驱动程序的路径。

在斯卡拉:

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]
于 2020-08-28T13:50:33.780 回答