java.lang.NoClassDefFoundError : better/files/File in spark-sbumit for scala code

标签 java scala apache-spark sbt spark-submit

当我将程序导出到 jar 文件并执行它时,我收到 java.lang.NoClassDefFoundError: better/files/File 错误。

我正在使用的代码如下。

预先感谢您的帮助

SBT

name := "testFunctions"

version := "1.0"

scalaVersion := "2.11.8"

libraryDependencies += "com.github.pathikrit" %% "better-files" % "2.17.1"
libraryDependencies ++= Seq(
  "org.apache.spark" % "spark-core_2.11" % "2.1.0",
  "org.apache.spark" % "spark-sql_2.11" % "2.1.0",
  "com.github.pathikrit" %% "better-files" % "2.17.1"
)

initialize := {
  val _ = initialize.value
  if (sys.props("java.specification.version") != "1.8")
    sys.error("Java 8 is required for this project.")
}

Scala 代码

/**
  * Created by cloudera on 7/23/17.
  */

import better.files.File._
import org.apache.spark.sql.SparkSession


object funcJM {


  val forDelete = (root/"/home/cloudera/Documents/fabo")
    .createIfNotExists()

  if (forDelete.exists)
    forDelete.delete()


  def main(args:Array[String]) : Unit = {

    val spark = SparkSession.builder
      .master("local")
      .appName("Get ForEx Data")
      .getOrCreate()



  }

}

命令行执行jar文件

spark-submit --class funcJM --master local[*] /home/cloudera/testFunctions/target/scala-2.11/testfunctions_2.11-1.0.jar --driver-class-path /home/cloudera/testFunctions/target/scala-2.11/testfunctions_2.11-1.0.jar

错误

Exception in thread "main" java.lang.NoClassDefFoundError: better/files/File at java.lang.Class.getDeclaredMethods0(Native Method) at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) at java.lang.Class.privateGetMethodRecursive(Class.java:3048) at java.lang.Class.getMethod0(Class.java:3018) at java.lang.Class.getMethod(Class.java:1784) at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:722) at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:187) at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:212) at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:126) at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala) Caused by: java.lang.ClassNotFoundException: better.files.File at java.net.URLClassLoader.findClass(URLClassLoader.java:381) at java.lang.ClassLoader.loadClass(ClassLoader.java:424) at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ... 10 more

代码所在的树结构如下所示 - 所以名为 func 的类位于 scala 目录中

\main
    \java
    \resources
    \scala
        -funcJM(class)
    \scala-2.11

最佳答案

您可以做三件事:

  1. 使用类似 sbt assembly 的内容编译一个 fat jar。包含 better.files.File 的 jar 将打包在 testfunctions_2.11-1.0.jar 中。

  2. 将包含更好的包的jar文件复制到spark jars目录中:../spark-2.1.0-bin-hadoop2.7/jars

  3. 使用 --driver-class-path better-files-akka_2.10.jar 指定包含 better 包的 jar 文件作为 Spark-submit 调用中的参数

关于java.lang.NoClassDefFoundError : better/files/File in spark-sbumit for scala code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45337912/

相关文章:

java - db4o 对象管理器企业版是免费的吗?哪里可以下载?它是一个独立的应用程序吗?

java - 在 apache Camel 中使用自定义注册表

java - 如何从多个列表中获取笛卡尔积?

scala - 如何匹配 Scala "match"语句中的类?

apache-spark - 如何在 Spark UDF 中编写多个 If 语句

scala - Spark 连接数组

java - 如何在Java中更改文件夹的名称

scala - 将Scala映射转换为列表

scala - 在 Spark 2+ 中通过 SparkSession 向 Kryo 注册类

regex - Spark SQL - 仅匹配数字的正则表达式