spark幾個錯誤


一、java.lang.NoSuchMethodError: net.jpountz.lz4.LZ4BlockInputStream.<init>(Ljava/io/InputStream;Z)V

當要將dataframe進行序列化(df.show()或者df.collect())時,報這個錯誤。

原因是:maven的pom.xml中含有spark 和 kafka。

1.spark2.3用到了lz4-1.3.0.jar,kafka0.9.0.1用到了lz4-1.2.0.jar,而程序運行時使用的是lz4-1.3.0.jar。

2.lz4-1.3.0.jar包中net.jpountz.util.Utils 類中沒有checkRange,該方法位於net.jpountz.util.SafeUtils和net.jpountz.util.UnsafeUtils

原文:https://blog.csdn.net/m0_37914799/article/details/84992275  
可以通過:mvn dependency:tree|less查看沖突的包。

解決辦法:

通過修改pom.xml中·kafka-client·依賴,exclude掉lz4的依賴

    <dependency>
        <groupId>org.apache.kafka</groupId>
        <artifactId>kafka-clients</artifactId>
        <version>${kafka.version}</version>
        <exclusions>
            <exclusion>
                <groupId>net.jpountz.lz4</groupId>
                <artifactId>lz4</artifactId>
            </exclusion>
        </exclusions>
    </dependency>

二、java.lang.NoSuchMethodError: com.fasterxml.jackson.module.scala.deser.BigDecimalDeserializer$.handledType()Ljava/lang/Class;

原因:這個錯誤是Hadoop版本的fasterxml版本較低,spark的較高,

解決方法:在maven的pom.xml文件中,記住一定要在</dependencyManagement> </dependencyManagement>中加入以下庫。

      <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-scala_2.11</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.module</groupId>
        <artifactId>jackson-module-jaxb-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>${jackson.version}</version>
      </dependency>
      <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-annotations</artifactId>
        <version>${jackson.version}</version>
      </dependency>

三、java.lang.NoSuchMethodError: io.netty.buffer.PooledByteBufAllocator.metric()Lio/netty/buffer/PooledByteBufAllocatorMetric;

加入:(也是版本不兼容)

      <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.1.17.Final</version>
      </dependency>

 

四、Error:scalac: Error: org.jetbrains.jps.incremental.scala.remote.ServerException

IDEA中JDK版本和Scala不匹配,我的JDK默認為IDEA自帶的JDK12,所以我換成了JDK1.8,就可以了

 

五、java.lang.NoClassDefFoundError: org/scalactic/source/Position

還是版本問題:原來我用的是2.2.1,然后寫Scalatest時會報這個錯誤

import com.google.common.io.Files
import java.io.File

import org.apache.commons.io.FileUtils
import org.apache.spark.sql.Row
import org.apache.spark.sql.test.SharedSparkSession
import org.scalatest.FunSuite

class UrlDmpDataProcessJobTest extends FunSuite with SharedSparkSession  {
  val testDir = new File(".").getCanonicalPath + "/test/url"
  var output: File = _

  override def beforeAll() {
    super.beforeAll()
    output = Files.createTempDir()
  }
  override def afterAll() {
    super.afterAll()
    FileUtils.deleteDirectory(output)
  }


  test("json parse") {
    import testImplicits._
    val jsonFile = testDir + "/dmp-json-data.txt"
    val jsonData = spark.read.json(jsonFile).toDF()
    val jsonDf = jsonData.as[UrlLoadData].filter(_ != null)
    jsonDf.show()
    val outputDf = UrlDmpDataParse.getJsonParseData(spark, jsonDf)
    outputDf.show()
    val urls = outputDf.select("urls").collect()
    val pid = outputDf.select("pid").collect()
    val uid = outputDf.select("uid").collect()
    assert(pid === Array(Row("631"),Row("631")))
    assert(uid === Array(Row("1bd55eb51c80733a994d853b98f46ce1"),Row("f34c9dc9f0b53cdd0972d50445759d45")))
  }


}

解決辦法:

    <dependency>
      <groupId>org.scalatest</groupId>
      <artifactId>scalatest_${scala.binary.version}</artifactId>
      <version>3.0.8</version>
      <scope>test</scope>
    </dependency>

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM