apache-spark - 带有 jar 的 Spark 工作流程

标签 apache-spark

我试图了解必须编译 jar 才能使用 Spark 的范围。

我通常会在 IDE 中编写临时分析代码,然后通过单击(在 IDE 中)在本地针对数据运行它。如果我对 Spark 的实验给出了正确的指示,那么我必须将我的脚本编译成一个 jar,并将它发送到所有 Spark 节点。 IE。我的工作流程是

  1. 编写分析脚本,它将上传自己的 jar(已创建 下面)
  2. 去做 jar 。
  3. 运行脚本。

对于临时迭代工作,这似乎有点多,而且我不明白没有它 REPL 是如何逃脱的。

更新:

这是一个例子,除非我将它编译成一个 jar 并执行 sc.addJar,否则我无法开始工作。但我必须这样做这一事实似乎很奇怪,因为只有普通的 Scala 和 Spark 代码。

import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.SparkFiles
import org.apache.spark.rdd.RDD

object Runner {
  def main(args: Array[String]) {
    val logFile = "myData.txt" 
    val conf = new SparkConf()
      .setAppName("MyFirstSpark")
      .setMaster("spark://Spark-Master:7077")

    val sc = new SparkContext(conf)

    sc.addJar("Analysis.jar")
    sc.addFile(logFile)

    val logData = sc.textFile(SparkFiles.get(logFile), 2).cache()

    Analysis.run(logData)
  }
}

object Analysis{
   def run(logData: RDD[String]) {
    val numA = logData.filter(line => line.contains("a")).count()
    val numB = logData.filter(line => line.contains("b")).count()
    println("Lines with 'a': %s, Lines with 'b': %s".format(numA, numB))
  }
}

最佳答案

您正在使用“过滤器”创建匿名函数:

scala> (line: String) => line.contains("a")
res0: String => Boolean = <function1>

除非将 jar 分发给工作人员,否则该函数的生成名称不可用。 worker 上的堆栈跟踪是否突出显示了缺失的符号?

如果您只想在本地调试而不必分发 jar,您可以使用“本地”主机:

val conf = new SparkConf().setAppName("myApp").setMaster("local")

关于apache-spark - 带有 jar 的 Spark 工作流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31210377/

相关文章:

apache-spark - 为什么即使使用 DataFrame API 按分区键查询表,Spark Cassandra 连接器也允许过滤?

amazon-web-services - 将数据从 Amazon Redshift 导出为 JSON

apache-spark - Spark 不从 netlib 加载 ARPACK 或 BLAS

python - Spark 中的总和变坏了

apache-spark - 如何在 Spark 中引入 Row 中的 schema?

apache-spark - 带聚合的 Spark 流式传输

hadoop - Spark Avro insertInto文件扩展名

hadoop - 使用pyspark从hdfs读取文件时拒绝连接

scala - Spark 数据框将列值获取到字符串变量中

python - 在 PySpark 中的数据框中获取值(value)