在使用Spark SQL时,遇到了“找不到Spark Logging类”的问题。

6
我将尝试使用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


1
@T.Gawęda 那个解决方案对我不起作用,因为将版本降级到1.5.2后,该版本没有 org.apache.spark.sql.Datasetorg.apache.spark.sql.SparkSession - khateeb
请检查连接器版本2.0 - 请参见https://github.com/datastax/spark-cassandra-connector - T. Gawęda
@T.Gawęda 当我使用Connector 2.0.0-M3而不是1.6时,我遇到了这个错误。我曾在其他程序中使用Connector 1.6与Spark 2.0一起使用。当我使用Spark SQL包时,问题就开始了。 - khateeb
在pom.xml文件中,你有<version>1.6.3</version> ;) Spark使用Guava和其他一些类库,可能会存在版本冲突。 - T. Gawęda
@T.Gawęda 我按照您的建议进行了更改。我在评论中发布了结果,显示了guava版本不匹配。 - khateeb
显示剩余2条评论
5个回答

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

0

来晚了,但我添加了

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

解决这个问题。看起来适用于我的情况。


0

以下依赖项对我的情况很有效。

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

0

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>

请告诉我它是否有效。

尝试过了,但没有成功。1.5.2版本不包含org.apache.spark.sql.Datasetorg.apache.spark.sql.SparkSession - khateeb
那么对于他们,您可以使用更新的版本,而对于其他人则使用旧版本。请尝试并告诉我。 - SachinSarawgi
@Khateeb 你好,你试过这个解决方案了吗?现在它显示什么错误? - SachinSarawgi
出现错误:[24,57] 无法访问 org.apache.spark.internal.Logging - khateeb
我已经使用相同的Spark配置运行其他程序,没有任何问题。当我开始使用Spark SQL时,出现了这个问题。 - khateeb
显示剩余2条评论

0

请确保您在pom.xml中使用了正确的Spark版本。

之前,在本地,我使用了不同版本的Spark,这就是为什么我在IntelliJ IDE中出现错误“无法访问Spark.logging类”的原因。

在我的情况下,将其从2.4.2更改为2.4.3,问题得到解决。

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

<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>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接