首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >独立的scala程序会利用分布式/并行处理吗?或者spark Scala需要单独的代码?

独立的scala程序会利用分布式/并行处理吗?或者spark Scala需要单独的代码?
EN

Stack Overflow用户
提问于 2016-04-26 23:54:39
回答 3查看 139关注 0票数 1

首先,很抱歉在这里提出了基本的疑问,但仍然可以解释下面的问题。

我对scala和spark非常陌生,所以我的疑问是,如果我编写一个独立的scala程序,并在spark(1 master 3 worker)上执行它,scala程序是否会利用干扰/并行处理,或者我是否需要编写一个单独的程序来获得分布式处理的优势??

例如,我们有一个scala代码,它将一个特定的格式化文件处理成逗号分隔的文件,它将一个目录作为输入,解析所有文件,并将输出写入单个文件(每个文件通常为100-200MB)。所以这是代码。

代码语言:javascript
复制
import scala.io.Source
import java.io.File
import java.io.PrintWriter
import scala.collection.mutable.ListBuffer
import java.util.Calendar

//import scala.io.Source
//import org.apache.spark.SparkContext
//import org.apache.spark.SparkContext._
//import org.apache.spark.SparkConf


object Parser {

  def main(args:Array[String]) {

    //val conf = new SparkConf().setAppName("fileParsing").setMaster("local[*]")
    //val sc = new SparkContext(conf)

  var inp = new File(args(0))
  var ext: String = ""
  if(args.length == 1)
  { ext = "log" } else { ext = args(1) }

   var files: List[String] = List("")

   if (inp.exists && inp.isDirectory) {
        files = getListOfFiles(inp,ext)
        }
    else if(inp.exists ) {
         files = List(inp.toString)
    }
else
{
    println("Enter the correct Directory/File name");
    System.exit(0);
}

    if(files.length <=0 )
    {
    println(s"No file found with extention '.$ext'")
    }
    else{
            var out_file_name = "output_"+Calendar.getInstance().getTime.toString.replace(" ","-").replace(":","-")+".log"
            var data = getHeader(files(0))
            var writer=new PrintWriter(new File(out_file_name))
            var record_count = 0

            //var allrecords = data.mkString(",")+("\n")
            //writer.write(allrecords)
            for(eachFile <- files)
                {
                    record_count += parseFile(writer,data,eachFile)
                }
            writer.close()
            println(record_count +s" processed into $out_file_name")

    }
//all func are defined here.
}

使用scala.io文件(Source.fromFile).getLines读取特定目录中的文件

所以我怀疑上面的代码(独立的prg)可以在分布式spark系统上执行吗?我会得到并行处理的优势吗??

好的,如果使用sc读取文件,它会使用分布式处理吗?

代码语言:javascript
复制
val conf = new SparkConf().setAppName("fileParsing").setMaster("local[*]")
val sc = new SparkContext(conf)
...
...
for(eachFile <- files)
                {
                    record_count += parseFile(sc,writer,data,eachFile)
                }

------------------------------------
def parseFile(......)
sc.textFile(file).getLines

因此,如果我编辑顶部代码来使用sc,那么它是否会在分布式spark系统上进行处理。

EN

回答 3

Stack Overflow用户

发布于 2016-04-27 00:38:30

不,不会的。要使用Spark进行分布式计算,你需要使用SparkContext。

票数 3
EN

Stack Overflow用户

发布于 2016-04-27 00:05:55

如果您使用spark-submit运行您提供的应用程序,那么您将根本不会使用集群。您必须重写它才能使用SparkContext。请通读Spark Programming Guide

票数 1
EN

Stack Overflow用户

发布于 2016-05-05 18:42:41

在Youtube上观看一些介绍性视频对于了解Apache Spark的一般工作原理非常有帮助。

例如,这些:https://www.youtube.com/watch?v=7k4yDKBYOcw https://www.youtube.com/watch?v=rvDpBTV89AM&list=PLF6snu5Jy-v-WRAcCfWNHks7lcNO-zrTI&index=4

理解它对于使用Spark是非常重要的。

“分布式处理的优势”

使用Spark可以为您提供在多服务器集群上分布处理的优势。因此,如果您打算稍后将应用程序移动到集群中,那么使用Spark模型和相应的API开发应用程序是有意义的。

您可以在本地计算机上运行Spark应用程序,但在这种情况下,您将无法获得Spark所能提供的所有优势。

无论如何,正如前面所说,Spark是一个特殊的框架,它有自己的开发库。所以你必须使用Spark context和Spark API重写你的应用程序,也就是像RDDs或Dataframe这样的特殊对象和相应的方法。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36869984

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档