我正在运行一个迁移项目,将代码从旧平台迁移到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()));
}
};
我们已经被困在这个问题上一段时间了,任何帮助都是非常感谢的。
暂无答案!
目前还没有任何答案,快来回答吧!