我在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中的表路径。
答案 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]