【问题标题】:Error: A JNI error has occurred, please check your installation and try again in IntelliJ IDEA for Scala-Spark Program using SBT错误:发生 JNI 错误,请检查您的安装并在 IntelliJ IDEA 中使用 SBT 重试 Scala-Spark 程序
【发布时间】:2022-08-23 00:34:02
【问题描述】:
import org.apache.spark.sql.SparkSession

object RDDBroadcast extends App {

  val spark = SparkSession.builder()
    .appName(\"SparkByExamples.com\")
    .master(\"local\")
    .getOrCreate()

  val states = Map((\"NY\",\"New York\"),(\"CA\",\"California\"),(\"FL\",\"Florida\"))
  val countries = Map((\"USA\",\"United States of America\"),(\"IN\",\"India\"))

  val broadcastStates = spark.sparkContext.broadcast(states)
  val broadcastCountries = spark.sparkContext.broadcast(countries)

  val data = Seq((\"James\",\"Smith\",\"USA\",\"CA\"),
    (\"Michael\",\"Rose\",\"USA\",\"NY\"),
    (\"Robert\",\"Williams\",\"USA\",\"CA\"),
    (\"Maria\",\"Jones\",\"USA\",\"FL\")
  )

  val rdd = spark.sparkContext.parallelize(data)

  val rdd2 = rdd.map(f=>{
    val country = f._3
    val state = f._4
    val fullCountry = broadcastCountries.value(country)
    val fullState = broadcastStates.value(state)
    (f._1,f._2,fullCountry,fullState)
  })

  println(rdd2.collect().mkString(\"\\n\"))

}

以上是获取国家和州名的 spark-scala 代码。在 InteliJ IDEA 中编译代码时,出现如下错误:

*Error: A JNI error has occurred, please check your installation and try again
Exception in thread \"main\" java.lang.NoClassDefFoundError: org/apache/spark/sql/SparkSession
    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 sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:650)
    at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:632)
Caused by: java.lang.ClassNotFoundException: org.apache.spark.sql.SparkSession
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:355)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
    ... 7 more*

我尝试了多种解决方案,例如检查 java 和 javac 版本,但版本是同步的。 Click here to view the image.

我还检查了项目 File->project Structure...-> Module 中的 java 版本,并将其与 Run->Edit Configurations 进行了比较,这也是匹配的。

Build.sbt 代码:Click here to view the sbt code

我正在使用在 Linux 操作系统中安装 inteliJ 的 VMware 工作站 16 播放器。 java版本是1.8.0_301

Click Here to view the InteliJ IDE in Linux Image

    标签: java scala apache-spark hadoop


    【解决方案1】:

    我遇到了同样的问题,通过将 Run/Debug Configurations -> Modify Options -> Java -> Add dependencies with provided scope to classpath 设置为 YES 解决了这个问题

    【讨论】:

      【解决方案2】:

      如何“运行/调试配置 -> 修改选项 -> Java -> 添加依赖项?” 我收到此错误:

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-01-13
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 2021-05-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多