1. 程式人生 > >mac 單機 搭建 eclipse spark開發環境

mac 單機 搭建 eclipse spark開發環境

在 mac初步搭建eclipse開發spark 程式環境,並以wordcount為例,分別使用scala和java語言進行開發

軟體準備:

1.The Scala IDE (based on Eclipse)

scala-SDK-4.4.1-vfinal-2.11-macosx.cocoa.x86_64.zip

根據自己的系統選擇合適的版本,下載安裝。


這裡選擇了已經為Hadoop2.6編譯好的版本,為了能和Hadoop2.6更好的結合。當然有能力你可自己編譯。

3使用Eclipse建立scala工程

4新增依賴jar包(位於SPARK_HOME/lib/下)--spark-assembly-1.6.0-hadoop2.6.0.jar

注意,當引入如下Spark-assembly-1.6.0-hadoop2.6.0.jar(對應我自己的spark下的jar包)會報錯,提示這個jar包與源環境中的jar包衝突(提示scala環境衝突)
錯誤提示如下:
Description Resource Path Location Type 
More than one scala library found in the build path 

解決方法:
1)在工程中移除自帶的scala版本庫 

2)右擊工程–> Properties –> Scala Compiler –> Use project Setting 中選擇spark對應的scala版本,此處選擇Lastest2.10 bundle

自此,單機開發環境已搭好,下面以wordcount為例,分別以scala和java  兩種語言開發。

scala:

package sparkscala01

import org.apache.spark._

import SparkContext._

objectWordCount {

def main(args:Array[String]):Unit= {

  val conf =new SparkConf().setMaster("local[4]").setAppName("word count")

  val sc = new SparkContext(conf

)

valtextFile =sc.textFile("/Users/wxzyhx/Downloads/paper1.txt")

//val result = textFile.flatMap(line => line.split("\\s+")).map(word => (word, 1)).reduceByKey(_ + _)

textFile.flatMap(_.split(" ")).map((_,1)).reduceByKey(_+_).collect().foreach(println)

  }

}

執行結果:


Java:

import java.util.Arrays;

import java.util.List;

import java.util.regex.Pattern;

import org.apache.spark.SparkConf;

import org.apache.spark.api.java.JavaPairRDD;

import org.apache.spark.api.java.JavaRDD;

import org.apache.spark.api.java.JavaSparkContext;

import org.apache.spark.api.java.function.FlatMapFunction;

import org.apache.spark.api.java.function.Function2;

import org.apache.spark.api.java.function.PairFunction;

import scala.Tuple2;

public class JavaWordCount {

@SuppressWarnings({"rawtypes","unchecked" })

public static void main(String[] args) {

final PatternSPLIT = Pattern.compile(" ");

SparkConf conf =new SparkConf().setMaster("local[4]").setAppName("word count");

JavaSparkContext context = new JavaSparkContext(conf);

JavaRDD<String> lines = context.textFile("/Users/wxzyhx/Downloads/paper1.txt");

@SuppressWarnings("unchecked")

JavaRDD words =lines.flatMap(newFlatMapFunction() {

@Override

public Iterable call(Objectline)throws Exception {

return Arrays.asList(SPLIT.split((String)line));

}

});

JavaPairRDD ones =words.mapToPair(newPairFunction() {

@Override

public Tuple2 call(Objectword)throws Exception {

return new Tuple2((String)word, 1);

}

});

JavaPairRDD counts =ones.reduceByKey(newFunction2() {

@Override

public Integer call(Objectarg0, Objectarg1)throws Exception {

return (Integer)arg0 + (Integer)arg1;

}

});

List<Tuple2> output =counts.collect();

for (Tuple2tuple :output) {

System.out.println(tuple._1() +": " +tuple._2());

}

context.close();

}

}

執行結果: