[spark] submit할 때 The main method in the given main class must be static 해결하기
scala 2017. 3. 14. 16:12spark streaming submit하다가 다음과 같은 에러가 발생할 때가 있었다.
The main method in the given main class must be static
val mainMethod = mainClass.getMethod("main", new Array[String](0).getClass)
if (!Modifier.isStatic(mainMethod.getModifiers)) {
throw new IllegalStateException("The main method in the given main class must be static")
}
분명 spark은 scala여서 static이 없는데, 왜 이게 발생한 걸까?
내가 만든 코드에는 문제가 없어 보였다.
http://docs.scala-lang.org/ko/tutorials/scala-for-java-programmers.html
object HelloWorld {
def main(args: Array[String]) {
println("Hello, world!")
}
}
똑똑한 독자들은 이미 눈치챘겠지만 위의 예제에서 main
함수는 static
이 아니다. Scala에는 정적 멤버(함수든 필드든)라는 개념이 아얘 존재하지 않는다. 클래스의 일부로 정적 멤버를 정의하는 대신에 Scala 프로그래머들은 정적이기 원하는 멤버들을 싱글턴 객체안에 선언한다.
아....
결국은 class로 정의한 클래스를 spark submit하다가 발생한 문제였다. 스칼라에서는 static 이라는 reserved word가 없지만, object는 내부적으로 생성한다.그래서 scala 코드에서 확인한 것이었다.
class 를 object로 변경하니 제대로 동작한다.
'scala' 카테고리의 다른 글
[spark] spark 2.0, 2.1 사용시 주의사항 - java.util.NoSuchElementException: None.get (0) | 2017.03.14 |
---|---|
[spark] Only one SparkContext may be running in this JVM 에러 (0) | 2017.03.14 |
[scala] 컬렉션의 padTo 예제 (0) | 2017.03.13 |
[scala] mkString 예제 (0) | 2017.03.13 |
[scala/spark] Option 관점에서 본 map/flatmap 예제 (0) | 2017.03.13 |