apache-spark - Spark - 从数据库中获取表
问题描述
我必须对给定数据库中的所有表执行操作,因此我使用以下代码。
但是,它也给了我视图,有没有办法只过滤表?
代码
def getTables(databaseName: String)(implicit spark: SparkSession): Array[String] = {
val tables = spark.sql(s"show tables from ${databaseName}").collect().map(_(1).asInstanceOf[String])
logger.debug(s"${tables.mkString(",")} found")
tables
}
另外,“显示视图显示错误”
scala> spark.sql("show views from gshah03;").show
org.apache.spark.sql.catalyst.parser.ParseException:
missing 'FUNCTIONS' at 'from'(line 1, pos 11)
== SQL ==
show views from gshah03;
-----------^^^
at org.apache.spark.sql.catalyst.parser.ParseException.withCommand(ParseDriver.scala:241)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parse(ParseDriver.scala:117)
at org.apache.spark.sql.execution.SparkSqlParser.parse(SparkSqlParser.scala:48)
at org.apache.spark.sql.catalyst.parser.AbstractSqlParser.parsePlan(ParseDriver.scala:69)
at org.apache.spark.sql.SparkSession.sql(SparkSession.scala:643)
... 49 elided
解决方案
尝试这个-
val df = spark.range(1, 5)
df.createOrReplaceTempView("df_view")
println(spark.catalog.currentDatabase)
val db: Database = spark.catalog.getDatabase(spark.catalog.currentDatabase)
val tables: Dataset[Table] = spark.catalog.listTables(db.name)
tables.show(false)
/**
* default
* +-------+--------+-----------+---------+-----------+
* |name |database|description|tableType|isTemporary|
* +-------+--------+-----------+---------+-----------+
* |df_view|null |null |TEMPORARY|true |
* +-------+--------+-----------+---------+-----------+
*/
推荐阅读
- wordpress - 将 Wordpress 系统时间向后设置 15 分钟(目前使用 UTC+2)
- sql - SQL 使用前 5 个结果作为过滤器
- python - 使用python套接字编程列出客户端计算机中服务器目录中的所有可用文件
- amazon-sagemaker - PATH/opt/ml/input/data/validation 不存在!发生了错误。你能给我一些关于如何解决它的建议吗?
- css - 用 img 覆盖按钮的整个高度
- python - 在 python 中绘制大型数据集时显示隐藏峰值的图
- python - python import - 从父目录导入 .json 文件
- python - 如何将字母数字字符串转换为时间格式?
- r - RVAideMemoire::chisq.multcomp(x, p.method = "fdr")
- arrays - numpy 二维数组在其中找到精确的二维数组