运行spark的google云平台抛出错误-找不到数据库“default”

4ngedf3f  于 2021-06-25  发布在  Hive
关注(0)|答案(0)|浏览(316)

我正在运行一个迁移项目,将代码从旧平台迁移到google云平台。代码是用java编写的,我们使用spark在hive上运行查询和其他数据转换。迁移之后,所有代码都被替换为在googlebigquery上运行。
现在来谈谈实际问题。在一个地方执行这行代码:

dataFrame = dataFrame.withColumn(columnName, org.apache.spark.sql.functions.callUDF("randomKeyLong", dataFrame.col("delete")));

此作业运行时gcp上的错误位于下面,stacktrace指向上面的代码行:

Exception in thread "main" org.apache.spark.sql.catalyst.analysis.NoSuchDatabaseException: Database 'default' not found;
    at org.apache.spark.sql.catalyst.catalog.SessionCatalog.org$apache$spark$sql$catalyst$catalog$SessionCatalog$$requireDbExists(SessionCatalog.scala:174)
    at org.apache.spark.sql.catalyst.catalog.SessionCatalog.functionExists(SessionCatalog.scala:1071)
    at org.apache.spark.sql.hive.HiveSessionCatalog.functionExists(HiveSessionCatalog.scala:175)
...
at org.apache.spark.sql.Dataset.select(Dataset.scala:1312)
    at org.apache.spark.sql.Dataset.withColumns(Dataset.scala:2197)
    at org.apache.spark.sql.Dataset.withColumn(Dataset.scala:2164)
...

有趣的是,这个作业有时运行时没有出错,有时抛出错误。我们没有运行任何可能意外引用“默认”数据库的查询。
udf只是使用自定义类加密此列的值。对应代码为:

UDF1<Long, String> LongPeopleKeyRandomUDF = new UDF1<Long, String>() {
    public String call(Long key) {
        Encrypt udf = new Encrypt(); // Custom class
        return "people.key." + udf.Encriptar(Integer.toString(key.intValue()));
    }
};

我们已经被困在这个问题上一段时间了,任何帮助都是非常感谢的。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题