Scala / Spark确定外部表的路径

时间:2019-03-08 06:40:15

标签: scala apache-spark spark-shell

我在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 个答案:

答案 0 :(得分:3)

我认为您可以使用.inputFiles

  

返回组成此数据集的文件的最大努力快照

请注意,这将返回Array[String],因此您应该遍历它以获取所需的所有信息。

所以实际上只是打电话

compactionTable.inputFiles

并查看数组的每个元素

答案 1 :(得分:0)

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

另请参阅How to get the value of the location for a Hive table using a Spark object?

答案 2 :(得分:0)

这是正确的答案:


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

lazy val s3location: String = tblMetadata.location.getPath

答案 3 :(得分:0)

使用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]