繁体   English   中英

使用 Spark SQL 时找不到 Spark Logging 类

[英]Getting Spark Logging class not found when using Spark SQL

我正在尝试用 Java 进行简单的 Spark SQL 编程。 在程序中,我从 Cassandra 表中获取数据,将RDD转换为Dataset并显示数据。 当我运行spark-submit命令时,出现错误: java.lang.ClassNotFoundException: org.apache.spark.internal.Logging

我的程序是:

SparkConf sparkConf = new SparkConf().setAppName("DataFrameTest")
        .set("spark.cassandra.connection.host", "abc")
        .set("spark.cassandra.auth.username", "def")
        .set("spark.cassandra.auth.password", "ghi");
SparkContext sparkContext = new SparkContext(sparkConf);
JavaRDD<EventLog> logsRDD = javaFunctions(sparkContext).cassandraTable("test", "log",
        mapRowTo(Log.class));
SparkSession sparkSession = SparkSession.builder().appName("Java Spark SQL").getOrCreate();
Dataset<Row> logsDF = sparkSession.createDataFrame(logsRDD, Log.class);
logsDF.show();

我的 POM 依赖项是:

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.11</artifactId>
        <version>2.0.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-streaming_2.11</artifactId>
        <version>2.0.2</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>com.datastax.spark</groupId>
        <artifactId>spark-cassandra-connector_2.11</artifactId>
        <version>1.6.3</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.11</artifactId>
        <version>2.0.2</version>
    </dependency>   
</dependencies>

我的spark-submit命令是: /home/ubuntu/spark-2.0.2-bin-hadoop2.7/bin/spark-submit --class "com.jtv.spark.dataframes.App" --master local[4] spark.dataframes-0.1-jar-with-dependencies.jar

我该如何解决这个错误? 降级到1.5.2不起作用,因为1.5.2没有org.apache.spark.sql.Datasetorg.apache.spark.sql.SparkSession

这可能是您 IDE 的问题。 由于其中一些包是创建的并且 Scala 是 Java 项目,因此有时 IDE 无法理解发生了什么。 我正在使用 Intellij,它一直向我显示此消息。 但是,当我尝试运行“mvn test”或“mvn package”时,一切都很好。 请检查这是否真的是某个包错误或只是丢失的 IDE。

Spark Logging 可用于 Spark 1.5.2及更低版本,但不能用于更高版本。 所以你在pom.xml的依赖应该是这样的:

<dependencies>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.10</artifactId>
    <version>1.5.2</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.10</artifactId>
    <version>1.5.2</version>
    <scope>provided</scope>
  </dependency>
  <dependency>
    <groupId>com.datastax.spark</groupId>
    <artifactId>spark-cassandra-connector_2.10</artifactId>
    <version>1.5.2</version>
  </dependency>
  <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.10</artifactId>
    <version>1.5.2</version>
  </dependency>   
</dependencies>

请让我知道它是否有效。

以下依赖项适用于我的情况。

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.2.0</version>
    <scope>provided</scope>
</dependency>

参加聚会很晚了,但我补充说

<dependency>
  <groupId>org.apache.spark</groupId>
  <artifactId>spark-core_2.11</artifactId>
  <version>2.1.1</version>
  <scope>provided</scope>
</dependency>

为了解决这个问题。 似乎适用于我的情况。

确保 pom.xml 中有正确的 spark 版本。

以前,在本地,我有不同版本的 Spark,这就是我在 IntelliJ IDE 中收到错误的原因。 “无法访问 Spark.logging 类”

就我而言,将其从 2.4.2 -> 2.4.3 更改,它解决了。

Spark 版本和 Scala 版本信息,我们可以从 spark-shell 命令获取。

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.4.3</version>
</dependency>
    <dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.4.3</version>
</dependency>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM