我在运行我的火花应用程序时面临一个奇怪的问题。
方案
有两个包含相同包名称的jar(com.example.app)。一个是我的实际代码,另一个是非生产代码,用于运行集成测试。我在主代码下有一个包类,它包含主代码中scala类使用的类型。 我正在使用spark-job服务器创建一个上下文,然后首先上传测试jar,然后将main.jar上传到服务器。在测试jar中运行一个作业后,我正在尝试在main.jar中运行该作业,该作业失败,例外
scala.reflect.internal.MissingRequirementError: object com.example.app.CommonUtils.package not found.
at scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16) ~[scala-reflect-2.10.5.jar:na]
at scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17) ~[scala-reflect-2.10.5.jar:na]
at scala.reflect.internal.Mirrors$RootsBase.ensureModuleSymbol(Mirrors.scala:126) ~[scala-reflect-2.10.5.jar:na]
at scala.reflect.internal.Mirrors$RootsBase.staticModule(Mirrors.scala:161) ~[scala-reflect-2.10.5.jar:na]
at scala.reflect.internal.Mirrors$RootsBase.staticModule(Mirrors.scala:21) ~[scala-reflect-2.10.5.jar:na]
但是当我创建一个上下文并单独上传主jar并在主jar中运行它时它工作正常。
这意味着, 在火花工作目录中,当主罐和测试罐都存在时,作业失败,然后失败。 如果仅存在主罐,则通过它。
package.scala
src/test/scala/
`-- com
`-- example
`-- app
|-- CommonUtils
package object CommonUtils {
type CompositeKey = (String, Int, Int)
...
}
问题
答案 0 :(得分:0)
一个包对象应该放在一个名为package.scala的文件中,并且包含它所在的包的名称。例如,在文件com / foo / bar / package.scala中:
package com.foo
package object bar {
...
}