在Spark 2.3.2中,调用Dataset.count()时出现java.lang.ClassCastException

时间:2018-10-10 20:57:58

标签: apache-spark spark-streaming

我正在读取数据集和printing schema。有效。 当我尝试找到dataset count时,出现ClassCastException 作为
  java.lang.ClassCastException: org.apache.hadoop.fs.FsUrlConnection cannot be cast to java.net.HttpURLConnection

虽然相同的代码在Mac OS上也可以使用。 运行Linux_4.14.48的云虚拟机中抛出了异常

请让我知道是否有修复程序。有关于此修复程序的主题讨论 在Hadoop-14598中使用,但该版本适用于旧版本,我认为Spark 2.3.2可能已经具有该补丁。

虽然没有很多代码行,但是将其粘贴到下面。调用df.count()时发生错误 val df = spark.read.format("own.format.dataset").load(sys.env("DATASET_ID")) val count = df.count()

4 个答案:

答案 0 :(得分:1)

我只是为这个确切的问题而苦恼。我能够通过覆盖sinon.stub(Auth0Service.prototype, "signIn").resolves({ success: false, accessToken: "test", errorMessage: "aaa", statusCode: 404, } as SignInResultModel); done(); 版本(hadoop-client使用spark-core 2.6.5)来修复它。我在hadoop-client中添加了以下内容:

build.sbt

答案 1 :(得分:0)

将Spark版本更新为2.3.0后,此问题已解决,建议使用更高版本来解决此问题

答案 2 :(得分:0)

该问题与 hadoop-client 2.7 相关,它与特定的 spark 版本无关,因此按照@marteljn 的建议,您应该提高您的 hadoop 版本。

如果你不能撞到你的 hadoop 客户端,那么你可以使用这个解决方法:

    URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory(sc.hadoopConfiguration()) {
      @Override
      public URLStreamHandler createURLStreamHandler(String protocol) {
        if (protocol.equals("http") || protocol.equals("https")) {
          return null;
        }
        return super.createURLStreamHandler(protocol);
      }
    });

根据https://issues.apache.org/jira/browse/SPARK-25694

的建议

答案 3 :(得分:0)

在 Spark Context 之后使用它。

SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("Application Name");
            JavaSparkContext sparkContext = new JavaSparkContext(sparkConf);
            URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory(sparkContext.hadoopConfiguration()) {
                  @Override
                  public URLStreamHandler createURLStreamHandler(String protocol) {
                    if (protocol.equals("http") || protocol.equals("https")) {
                      return null;
                    }
                    return super.createURLStreamHandler(protocol);
                  }
                });