Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala “线程中的异常”;“主要”;java.lang.NoSuchMethodError:org.apache.commons.beanutils.PropertyUtilsBean_Scala_Apache Spark_Spark Dataframe - Fatal编程技术网

Scala “线程中的异常”;“主要”;java.lang.NoSuchMethodError:org.apache.commons.beanutils.PropertyUtilsBean

Scala “线程中的异常”;“主要”;java.lang.NoSuchMethodError:org.apache.commons.beanutils.PropertyUtilsBean,scala,apache-spark,spark-dataframe,Scala,Apache Spark,Spark Dataframe,我试图读取属性文件,但遇到了下面给出的错误。我编写了一个Scala软件包,试图读取属性文件并调用abc.Scala程序。如有任何帮助,将不胜感激 文件:-xyz.properties driver = "oracle.jdbc.driver.OracleDriver" url = "jdbc:oracle:thin:@xxxx:1521/xxxx.xxxx" username = "xxx" password = "xxx" input_file = "C:\\Users\\xxx\\test\

我试图读取属性文件,但遇到了下面给出的错误。我编写了一个Scala软件包,试图读取属性文件并调用abc.Scala程序。如有任何帮助,将不胜感激

文件:-xyz.properties

driver = "oracle.jdbc.driver.OracleDriver"
url = "jdbc:oracle:thin:@xxxx:1521/xxxx.xxxx"
username = "xxx"
password = "xxx"
input_file = "C:\\Users\\xxx\\test\\src\\main\\resources\\xxxx.xlsx"
build.sbt

name := "xxx.xxxx.xxxxx"

scalaVersion := "2.10.6"

ivyScala := ivyScala.value map{ _.copy(overrideScalaVersion = true) }


libraryDependencies ++= Seq(
"org.apache.spark" %% "spark-core" % "2.1.0",
"com.databricks" %% "spark-csv" % "1.5.0",
"org.apache.commons" % "commons-configuration2" % "2.1.1",
"commons-beanutils" % "commons-beanutils" % "1.9.3",
"org.apache.spark" %% "spark-sql" % "2.1.0",
"org.scala-lang" % "scala-xml" % "2.11.0-M4"  )
包装

package com.xxx.zzzz.xxx1

        import java.io.File
        import org.apache.commons.configuration2.builder.fluent.{Configurations, Parameters}


        object Configuration {

          var config = new Configurations()
          var configs = config.properties(new File("xyz.properties"))

          var inputFile = configs.getString("input")
          var userName = configs.getString("user_name")
          var password = configs.getString("passwd")
          var driver = configs.getString("driver")
          var url = configs.getString("Url")

        }
主程序abc.scala

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SQLContext
import package com.xxx.zzzz.xxx1.Configurations
import org.apache.commons.beanutils.PropertyUtils


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

        //Logger.getRootLogger().setLevel(Level.OFF)

        println("Inside main program"+ Configuration.driver)
        //Set the properties for spark to connect the oracle database
        val dbProp = new java.util.Properties
        dbProp.setProperty("driver", Configuration.driver)
        dbProp.setProperty("user", Configuration.userName)
        dbProp.setProperty("password", Configuration.password)


        //Create a connection to connect spark
        val conf = new SparkConf().setAppName("Simple Application").setMaster("local")
        val sc = new SparkContext(conf)
        val sqlContext = new SQLContext(sc)

    //exception handlying
    try {
      //Create dataframe boject
      val df = sqlContext.read
        .option("location", Configuration.inputFile)        //Initiating input path
        .option("sheetName", "xyz")                       //Give the SheetName
        .option("useHeader", "true")                        //It takes the header name from excel sheet
        .option("treatEmptyValuesAsNulls", "true")
        .option("inferSchema", "true")
        .option("addColorColumns", "false")
        .load()
      // Write into oracale database
      df.write.mode("append").jdbc(Configuration.url, "xyz", dbProp)
    }
    catch {

        case e: Throwable => e.printStackTrace();
    }

      }
}
错误

线程“main”java.lang.NoSuchMethodError中的异常:org.apache.commons.beanutils.PropertyUtilsBean.AddBeanTransectt(Lorg/apache/commons/beanutils/BeanTransectt;)V 位于org.apache.commons.configuration2.beanutils.BeanHelper.initBeanUtilsBean(BeanHelper.java:631) 位于org.apache.commons.configuration2.beanutils.BeanHelper.(BeanHelper.java:89) 位于java.lang.Class.forName0(本机方法) 位于java.lang.Class.forName(Class.java:264) 位于com.sun.proxy.$Proxy0。(来源未知) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) 位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) 在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) 位于java.lang.reflect.Constructor.newInstance(Constructor.java:423) 位于java.lang.reflect.Proxy.newProxyInstance(Proxy.java:739) 位于org.apache.commons.configuration2.builder.fluent.Parameters.createParametersProxy(Parameters.java:294) 位于org.apache.commons.configuration2.builder.fluent.Parameters.fileBased(Parameters.java:185) 位于org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:602) 位于org.apache.commons.configuration2.builder.fluent.Configurations.fileParams(Configurations.java:614) 位于org.apache.commons.configuration2.builder.fluent.Configurations.fileBasedBuilder(Configurations.java:132) 位于org.apache.commons.configuration2.builder.fluent.Configurations.propertiesBuilder(Configurations.java:238) 位于org.apache.commons.configuration2.builder.fluent.Configurations.properties(Configurations.java:282) 位于com.rxcorp.italy.config.Configuration$(Configuration.scala:8) 位于com.rxcorp.italy.config.Configuration$(Configuration.scala) 在com.rxcorp.paneldataloading.ItalyPanelData$.main(abc.scala:12)
此类异常表示版本不兼容

意思是:您编写的代码(或者更可能是:表面下的一个库)想要调用一个方法

org.apache.commons.beanutils.PropertyUtilsBean.addBeanIntrospector(BeanIntrospector[]);
但问题是:在运行时,PropertyUtilsBean的类文件不包含该方法

因此:您必须后退一步,了解堆栈中的组件,并在Apache commons库中查看它们的版本要求

在查看javadoc时,您会得到更多的想法;正如上面所说:因为:1.9在那里

也就是说:这个方法添加了ApacheCommons1.9;因此,您的堆栈中的某个部分希望至少是commons版本的;但是执行整个过程的JVM中的类路径。。。有一个旧版本


So:检查apache commons的类路径;最有可能的是,您只需更新到更新版本的ApacheCommons即可。(是的,也许这将意味着更多的“艰苦”调试工作;因为至少您的构建设置包括更新版本的apache commons)。

我想我也有类似的问题。Apache commons配置2.7与Apache commons BeanUtils 1.9一起用于我们的项目。 不幸的是,我们使用的另一个库是jxls reader 2.0+,这个库引用了commons-digester3库

因此beanutils 1.9和commons-digester3库都有一个打包的类org.apache.commons.beanutils.PropertyUtilsBean。但commons-digester3的版本没有上述方法,这让我们陷入了与您相同的困境。 目前,我们可以幸运地看到,我们的windows服务器首先加载beanutils的“正确”版本,而一些使用mac的开发人员则通过另一种方式加载了digester3软件包,首先出现了“没有这样的方法”错误

不确定我们在这里的解决办法是什么

无论如何,检查类路径上是否有两次该类,并通过检查类路径上所有pom.xml的依赖lib来找出谁在使用它。最后,如果代码不需要某个库,您可能会幸运地删除它(几率很低:-(尽管)


11月10日更新:我将commons-digester3从jxls阅读器依赖项中排除:

<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-reader</artifactId>
    <version>2.0.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-digester3</artifactId>
        </exclusion>
    </exclusions>
</dependency>

org.jxls
jxls阅读器
2.0.3
org.apache.commons
commons-digester3

<> P> >从JXLS阅读器中使用“DEPS”分类器的公文消化器不会得到解决,我在我们的POM.XML中明确地把它拉了出来,但是只有普通的JAR没有封装类的共用日志,共用BeANUTLS……/P>只是想知道:我的答案到底帮助了你吗?如果是的话,请考虑在某个时候接受。
<dependency>
    <groupId>org.jxls</groupId>
    <artifactId>jxls-reader</artifactId>
    <version>2.0.3</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-digester3</artifactId>
        </exclusion>
    </exclusions>
</dependency>