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();
}
}
執行結果: