Um die Entwicklung meiner Karte zu erleichtern Aufgaben reduzieren, die auf Hadoop läuft tatsächlich vor, um die Aufgaben zu Hadoop bereitstellen I-Test eine einfache Karte Minderer schrieb ich:Wie man einfache Spark-App von Eclipse/Intellij IDE ausführen?
object mapreduce {
import scala.collection.JavaConversions._
val intermediate = new java.util.HashMap[String, java.util.List[Int]]
//> intermediate : java.util.HashMap[String,java.util.List[Int]] = {}
val result = new java.util.ArrayList[Int] //> result : java.util.ArrayList[Int] = []
def emitIntermediate(key: String, value: Int) {
if (!intermediate.containsKey(key)) {
intermediate.put(key, new java.util.ArrayList)
}
intermediate.get(key).add(value)
} //> emitIntermediate: (key: String, value: Int)Unit
def emit(value: Int) {
println("value is " + value)
result.add(value)
} //> emit: (value: Int)Unit
def execute(data: java.util.List[String], mapper: String => Unit, reducer: (String, java.util.List[Int]) => Unit) {
for (line <- data) {
mapper(line)
}
for (keyVal <- intermediate) {
reducer(keyVal._1, intermediate.get(keyVal._1))
}
for (item <- result) {
println(item)
}
} //> execute: (data: java.util.List[String], mapper: String => Unit, reducer: (St
//| ring, java.util.List[Int]) => Unit)Unit
def mapper(record: String) {
var jsonAttributes = com.nebhale.jsonpath.JsonPath.read("$", record, classOf[java.util.ArrayList[String]])
println("jsonAttributes are " + jsonAttributes)
var key = jsonAttributes.get(0)
var value = jsonAttributes.get(1)
println("key is " + key)
var delims = "[ ]+";
var words = value.split(delims);
for (w <- words) {
emitIntermediate(w, 1)
}
} //> mapper: (record: String)Unit
def reducer(key: String, listOfValues: java.util.List[Int]) = {
var total = 0
for (value <- listOfValues) {
total += value;
}
emit(total)
} //> reducer: (key: String, listOfValues: java.util.List[Int])Unit
var dataToProcess = new java.util.ArrayList[String]
//> dataToProcess : java.util.ArrayList[String] = []
dataToProcess.add("[\"test1\" , \"test1 here is another test1 test1 \"]")
//> res0: Boolean = true
dataToProcess.add("[\"test2\" , \"test2 here is another test2 test1 \"]")
//> res1: Boolean = true
execute(dataToProcess, mapper, reducer) //> jsonAttributes are [test1, test1 here is another test1 test1 ]
//| key is test1
//| jsonAttributes are [test2, test2 here is another test2 test1 ]
//| key is test2
//| value is 2
//| value is 2
//| value is 4
//| value is 2
//| value is 2
//| 2
//| 2
//| 4
//| 2
//| 2
for (keyValue <- intermediate) {
println(keyValue._1 + "->"+keyValue._2.size)//> another->2
//| is->2
//| test1->4
//| here->2
//| test2->2
}
}
Dies ermöglicht es mir meine mapreduce Aufgaben in meinem Eclipse laufen IDE unter Windows vor dem Bereitstellen auf dem tatsächlichen Hadoop-Cluster. Ich möchte etwas Ähnliches für Spark ausführen oder die Möglichkeit haben, Spark-Code aus Eclipse zu schreiben, um es vor der Bereitstellung im Spark-Cluster zu testen. Ist das mit Spark möglich? Da Spark auf Hadoop ausgeführt wird, bedeutet das, dass Spark nicht ausgeführt werden kann, ohne zuvor Hadoop installiert zu haben? Mit anderen Worten, kann ich den Code nur mit den Spark-Bibliotheken ausführen? :
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
object SimpleApp {
def main(args: Array[String]) {
val logFile = "$YOUR_SPARK_HOME/README.md" // Should be some file on your system
val sc = new SparkContext("local", "Simple App", "YOUR_SPARK_HOME",
List("target/scala-2.10/simple-project_2.10-1.0.jar"))
val logData = sc.textFile(logFile, 2).cache()
val numAs = logData.filter(line => line.contains("a")).count()
val numBs = logData.filter(line => line.contains("b")).count()
println("Lines with a: %s, Lines with b: %s".format(numAs, numBs))
}
}
von https://spark.apache.org/docs/0.9.0/quick-start.html#a-standalone-app-in-scala
Wenn ja genommen, was die Spark-Bibliotheken, die ich in meinem Projekt gehören müssen, sind?
[spark.apache.org] (https://spark.apache.org/downloads.html) zeigt spark-core_2.10, Version 0.9.0-Inkubation an. Ich würde damit beginnen, dass es Abhängigkeiten sind. Sie finden das [hier] (http://mvnrepository.com/artifact/org.apache.spark/spark-core_2.10/0.9.0-inkubating) oder [hier] (http://search.maven.org/# durchsuchen | -183575761). Wenn Sie Ihr Projekt nicht mit einem Abhängigkeitsverwaltungs-Plugin erstellen, um Ihr Eclipse-Projekt zu erstellen, müssen Sie die Abhängigkeiten selbst herunterladen. Einer scheint Hadoop-Client zu sein. – n0741337