解决SparkSQL 1.3 ~ 1.4 saveAsTable默认保存到default数据的问题 2015-07-09 09:21:21 在Spark1.3~1.4.0的版本中,在SparkSQL中使用HiveContext的DataFrame的saveAsTable方法时,数据表默认保存到了default数据库中。 相关文件为:spark/sql/hive/src/main/scala/org/apache/spark/sql/hive/HiveMetastoreCatalog.scala 134行开始的一段代码有问题,如下: ``` /** * Creates a data source table (a table created with USING clause) in Hive's metastore. * Returns true when the table has been created. Otherwise, false. */ def createDataSourceTable( tableName: String, userSpecifiedSchema: Option[StructType], partitionColumns: Array[String], provider: String, options: Map[String, String], isExternal: Boolean): Unit = { val (dbName, tblName) = processDatabaseAndTableName("default", tableName) ... } ``` 从代码可见,数据表默认保存到了default数据了。如果我们的代码中使用了`use xxx`切换了数据库,那这个功能显然和预期不符了。 将函数的第一行替换为:`val (dbName, tblName) = processDatabaseAndTableName(client.currentDatabase, tableName)`重新编译下Spark就好了。 非特殊说明,均为原创,原创文章,未经允许谢绝转载。 原始链接:解决SparkSQL 1.3 ~ 1.4 saveAsTable默认保存到default数据的问题 赏 Prev 解决Spark 1.4.1中SUM为null的列返回0的问题 Next 键盘侠必备——机械键盘