我正在寻找互动/ adhoc火花工作的解决方案。我有一些论据需要传递给我的Spark Job。这很好,但是我希望用户从下拉菜单中选择用户选择的这些参数。
因此,例如Spark-submit工作看起来如下所示,带有以下参数" prod /opt/var/var-spark/application.conf vc FX是是是"。
$SPARK_HOME/bin/spark-submit \
--class main.gmr.SparkGMR \
--deploy-mode client \
--verbose \
--driver-java-options "-Dlog4j.configuration=file:///opt/var/spark-2.1.0-bin-hadoop2.7/conf/log4j.properties" \
--conf "spark.executor.extraJavaOptions=-Dlog4j.configuration=file:///opt/var/spark-2.1.0-bin-hadoop2.7/conf/log4j.properties" \
file:///opt/var/var-spark/var-spark-assembly-1.0.jar \
prod /opt/var/var-spark/application.conf vc FX yes yes yes
现在我想让这项工作一直在运行,因为它会在内存中缓存许多数据帧,可以用于以后的分析。但问题是这个工作已经死亡,内存中的数据帧/视图不再存在。
另外,我想在下次为这份工作提交不同的论据,例如 " prod /opt/var/var-spark/application.conf sc dx是是是" 。
我试过的方法:我尝试使用 Livy API / batches端点来提交带有参数的作业,但是作业开始,处理然后就死了。 / sessions端点是理想的选择,但不允许我在请求头中提交类名和参数参数。
还尝试使用 Spark Structured Streaming 和以下代码来获取数据帧中的参数,但它失败并出现以下错误:
val lines = spark.readStream
.format("socket")
.option("host", "localhost")
.option("port", 4042)
.load();
import spark.implicits._;
val words = lines.as[String].flatMap(_.split(",")).collect;
var a = words(0);
var b = words(1);
var c = words(2);
var d = words(3);
var e = words(4);
val wordCounts = words.groupBy("value").count();
val query = wordCounts.writeStream
.outputMode("complete")
.format("console")
.start()
query.awaitTermination()
错误:
线程中的异常" main" org.apache.spark.sql.AnalysisException: 必须执行带有流式源的查询 writeStream.start();; textSocket at org.apache.spark.sql.catalyst.analysis.UnsupportedOperationChecker $ $ .ORG阿帕奇$ $火花SQL $ $催化剂分析$ $$ UnsupportedOperationChecker throwError(UnsupportedOperationChecker.scala:196)
我想从上面的代码中获取a,b,c,d,e中的参数,然后我可以为我的工作中运行的查询传递动态参数。
任何线索和其他方法都将受到赞赏。
由于