有一个 spark 组件从转换后的数据中创建一个 sql 表。它成功地将数据保存到 <database_name>.db 文件夹下的 spark-warehouse 中。该组件还尝试从现有表中读取,以免盲目覆盖。阅读时,spark 无法找到除默认数据库以外的任何数据库。
火花版本:2.4
val spark: SparkSession = SparkSession.builder().master("local[*]").config("spark.debug.maxToStringFields", 100).config("spark.sql.warehouse.dir", "D:/Demo/spark-warehouse/").getOrCreate()
def saveInitialTable(df:DataFrame) {
df.createOrReplaceTempView(Constants.tempTable)
spark.sql("create database " + databaseName)
spark.sql(
s""" create table if not exists $databaseName.$tableName
|using parquet partitioned by (${Constants.partitions.mkString(",")})
|as select * from ${Constants.tempTable}""".stripMargin)
}
def deduplication(dataFrame: DataFrame): DataFrame ={
if(Try(spark.sql("show tables from " + databaseName)).isFailure){
//something
}
}
saveInitialTable 函数执行成功后。在第二次运行中,重复数据删除功能仍然无法拾取 <database_name>
我没有在任何地方明确使用 hive,只是触发 DataFrames 和 SQL API。
当我在与 spark-warehouse 相同的目录中运行 repl 时,它也会提供默认数据库。
scala> spark.sql("show databases").show()
2021-10-07 18:45:57 WARN ObjectStore:6666 - Version information not found in metastore.
hive.metastore.schema.verification is not enabled so recording the schema version 1.2.0
2021-10-07 18:45:57 WARN ObjectStore:568 - Failed to get database default, returning
NoSuchObjectException
+------------+
|databaseName|
+------------+
| default|
+------------+