Spark Interactive / Adhoc Job,可以为Spark Context提供动态参数

时间:2017-08-18 00:38:38

标签: scala apache-spark apache-spark-sql spark-dataframe

我正在寻找互动/ 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中的参数,然后我可以为我的工作中运行的查询传递动态参数。

任何线索和其他方法都将受到赞赏。

由于

0 个答案:

没有答案