我尝试在intellij IDEA中运行一个简单的测试代码。下面是我的代码:
import org.apache.spark.sql.functions._
import org.apache.spark.{SparkConf}
import org.apache.spark.sql.{DataFrame, SparkSession}
object hbasetest {
val spconf = new SparkConf()
val spark = SparkSession.builder().master("local").config(spconf).getOrCreate()
import spark.implicits._
def main(args : Array[String]) {
val df = spark.read.parquet("file:///Users/cy/Documents/temp")
df.show()
spark.close()
}
}
我的相依性清单:
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_2.11</artifactId>
<version>2.1.0</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_2.11</artifactId>
<version>2.1.0</version>
<!--<scope>provided</scope>-->
</dependency>
当我单击Run按钮时,它抛出一个异常:
Exception in thread "main" java.lang.NoSuchMethodError: org.apache.hadoop.mapreduce.TaskID.<init>(Lorg/apache/hadoop/mapreduce/JobID;Lorg/apache/hadoop/mapreduce/TaskType;I)V
我检查了这个post,但是修改后情况没有改变。我能得到一些关于在IDEA中运行本地Spark应用程序的帮助吗?
更新:我可以用spark-submit运行这个代码。我希望直接用运行按钮运行它在IDEA。
4条答案
按热度按时间ztmd8pv51#
您是否正在使用cloudera沙盒并运行此应用程序,因为在POM.xml中,我可以看到CDH依赖项'2.6.0-mr 1-cdh5.5.0'
如果你正在使用cloudera,请使用下面的spark scala项目依赖项,因为“spark-core_2.10”工件版本已经更改。
我使用下面的引用来运行我的spark应用程序。
参考:http://blog.cloudera.com/blog/2014/04/how-to-run-a-simple-apache-spark-app-in-cdh-5/
vsmadaxz2#
以下是我在IntelliJ中用于运行/调试配置的设置:
spark-core和spark-sql jar在我的build.sbt中被称为“提供的”依赖项,它们的版本必须与spark_dir中安装的Spark之一匹配。
vatpfxk53#
回复可能有点晚了,但我也遇到了同样的问题。你可以用spark-submit运行,可能你已经有了相关的依赖项。我的解决方案是:
Intellij Module Settings
中的相关依赖项从provided
更改为compile
。您可以只更改其中的一部分,但必须尝试更改。更残酷的解决方案是更改所有依赖项。qpgpyjmq4#
我也遇到了这个问题,我的代码中也有一个旧的cloudera hadoop参考。(你必须点击原始发帖者链接中的“编辑”链接才能看到他最初的pom设置)。
我可以保留这个引用,只要我把它放在 * 我的依赖项的顶部 *(顺序很重要!)。
请注意,在Intellij的2018.1版本中,您可以选中 Include dependiencies with“Provided”Scope,这是一种保持pom作用域干净的简单方法。