java - 从 IDE 运行 Spark SQL 应用程序的 setJars() 方法
问题描述
我正在创建一个 Spark Sql 应用程序,我想用我的 IDE 从本地机器上的远程 spark 集群上运行它。我知道我应该在创建 SparkConf 对象时设置一些选项,就像这样:
SparkConf conf = new SparkConf()
.setMaster("spark://SPARK-MASTER-ADDRESS:7077")
.set("spark.driver.host","my local IP Address")
.setJars(new String[]{"build\\libs\\spark-test-1.0-SNAPSHOT.jar"})
.setAppName("APP-NAME");
它在 IDE 中运行,一切正常,
但我的问题是:
1)每次更改任何内容时,我是否需要重建我的应用程序的 jar 文件并将其路径设置为 setJars 方法?我看到在一些论坛上已经说过:每次更改任何内容时都需要构建 jar。但是每次重建应用程序的jar文件看起来有点困难。有没有更好的方法呢?
2)为什么有时不需要使用 setJars 方法,尽管我通过 IDE 运行程序?例如,当我在代码中不使用lambda 函数时,不需要 setjars 函数。假设我有一类人有两个字段:CustomerNo,AccountNo。当我像这样在我的代码中使用lamba函数时(personDS是person对象的数据集):
personDS.filter(f -> f.getCustomerNo().equals("001")).show();
出现以下错误:
java.lang.ClassCastException: cannot assign instance of scala.collection.immutable.List$SerializationProxy to field org.apache.spark.rdd.RDD.org$apache$spark$rdd$RDD$$dependencies_ of type scala.collection.Seq in instance of org.apache.spark.rdd.MapPartitionsRDD
但是当我在我的代码中不使用 Lamba 函数时:
personDS.filter(col("customerNo").equalTo(001)).show();
没有错误发生。那么,为什么会发生这种情况?为什么我在使用 lambda 函数时必须使用 setJars?我什么时候应该使用 setJars 什么时候不应该使用?
解决方案
所以,在这里我假设你没有使用spark-submit
设施,而是直接从你的 IDE 运行 spark 程序。
以下是我对您第一个问题的回答:
1)每次更改任何内容时,是否都需要重建应用程序的 jar 文件?-是的,部署您每次更改代码时都需要构建 jar 的更改。我使用 maven 来做同样的事情。
第二个问题:
我认为,每当您使用引用项目的方法/类的 lambda 进行任何类型的映射操作时,您都需要将它们作为附加 jar 提供。
推荐阅读
- kubernetes - 如何更好地理解 k8s 上的本地临时存储配置
- c - 如何使用 rsync 或其他方式将文件复制到目录中?
- azure - Azure 更新管理以 csv 格式生成补丁状态报告
- python - 如何读取 Kinesis 客户端库 (KCL) 的 Python 客户端属性文件中的环境变量?
- python - 如何允许作者和管理员同时修补和删除权限?
- java - 用java spring处理不断增长的excel文件
- javascript - 具有空值的firebase推送方法是否仅用于获取ID,触发child_added事件?
- r - 使用 stringr 匹配所有换行符
- php - 如何制作 Laravel 动态数据表?
- python - 不能接受多个输入