如何重写Spark Scala代码以在Apache Livy中使用它

问题描述

我重写此代码

      equipment:{
                data:[],paralel_bar: 'blabla',paralletes: 'blabla',rings: 'blabla',bar: 'blabla',bar2: 'blabla',weight: 'blabla',resistance_band: 'blabla',},

对此:

import org.apache.spark.sql.SparkSession

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "file:///root/spark/README.md"
    val spark = SparkSession.builder.appName("Simple Application").getorCreate()
    val logData = spark.read.textFile(logFile).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println(s"Lines with a: $numAs,Lines with b: $numBs")
    spark.stop()
  }
}

但是当用sbt val spark编译时,无法正确识别val spark,并且收到错误消息“读取的值不是nothing的成员”

当我尝试使用/ batches运行生成的jar文件时,在注释火花相关的代码之后,我也收到错误java.lang.NoSuchMethodException:Test.main([Ljava.lang.String;)”

请问任何机构都能显示正确的spark scala代码重写方式吗?

解决方法

使用Livy无需重写您的Spark应用程序。相反,您可以使用其REST interface在运行livy服务器的群集上提交作业,检索日志,获取作业状态等。

作为一个实际示例,以下是在AWS上运行应用程序的说明。

设置:

  1. 使用AWS EMR创建一个Spark集群,其中包含Spark,Livy和应用程序所需的其他任何预安装的应用程序。
  2. 将您的JAR上载到AWS S3
  3. 确保连接到群集的安全组具有入站规则,该规则将IP在端口8998(Livy的端口)上列入白名单。
  4. 确保您的群集有权访问S3以便获取JAR。

现在,您将可以使用cURL(或任何等效方法)发出POST请求来提交您的申请:

curl -H "Content-Type: application/json" -X POST --data '{"className":"<your-package-name>.SimpleApp","file":"s3://<path-to-your-jar>"}' http://<cluster-domain-name>:8998/batches