2016-03-26 6 views
0

Ich bin neu in Scala und ich habe versucht, das Programm maximale Temperatur von Hadoop definitive Anleitung ausführen, aber es ist Fehlerarray out-of-Exception in letzten. Und ich bin nicht in der Lage, den Code klar zu verstehen, der in dem Buch steht.Spark Maximale Temperatur Beispiel durch definitive Anleitung

Unten ist der Code

import org.apache.spark.SparkContext._ 
import org.apache.spark.{SparkConf, SparkContext} 
object MaxTemperature { 
def main(args: Array[String]) { 
val conf = new SparkConf().setAppName("Max Temperature").setMaster("local") 
val sc = new SparkContext(conf) 
val lines = sc.textFile("011990-99999-1949.txt") 
val records = lines.map(_.split("\t")) 
val filtered = records.filter(rec => (rec(1) != "9999" 
&& rec(2).matches("[01459]"))) 
val tuples = filtered.map(rec => (rec(0).toInt, rec(1).toInt)) 
val maxTemps = tuples.reduceByKey((a, b) => Math.max(a, b)) 
maxTemps.foreach(println(_)) 
} 
} 

ich den Punkt bin immer nur, dass sie die Datei und nach dieser Spaltung und Map-Funktion Ich habe versucht, mich nicht immer lesen die Split- und Kartenfunktion auf verschiedene RDD zu brechen aber keine nützlichen Dinge, kann mir jemand vorschlagen, wie man die Ausgabe für jeden Schritt überprüft.

Dank & Grüße Amit

+3

Welche Zeile gibt die Ausnahme? Da es auch explizite Indizes gibt, die für 'rec' verwendet werden, verlassen Sie sich auf das Format der Eingabedatei und jede Zeile hat mindestens 3 enties - können Sie also sagen, wie das aussieht? –

+0

Das Problem ist mit der Formatierung der Eingabetextdatei. Es sollte keine leeren Zeilen geben und jede Zeile sollte 3 oder mehr tabulatorgetrennte Variablen haben. – gonephishing

+0

Hallo, ich versuche, diese Zeilen der Datei zu verarbeiten, aber es ist nicht in der Zeile vorhanden und ich bin mir nicht sicher, wo ich die Zeile nach Tab aufteilen muss, damit ich das gewünschte Ergebnis bekommen kann. 0067011990999991949010107004 + 68750 + 023550FM-12 + 038299999V0201801N006719999999N9999999N9-00281 + 99999999999ADDAA199000591AY131999GF108991999999999999999999KA1999N-01001MW1101 0043011990999991949010112004 + 68750 + 023550FM-12 + 038299999V0201801N006719999999N9999999N9-00281 + 99999999999ADDAY131999GF108991999999999999999999MW1361 –

Antwort

0

versuchen Sie bitte die folgenden Code kann es helfen kann: -

Probeneingang: - 91 67 Pradesh 33 19 Agra Uttar 90 67 Allahabad Uttar Pradesh 32 19 87 60 Amritsar Punjab 30 15 89 66 Bhopal Madhya Pradesh 32 19 87 62 Chandigarh 30 17 82 60 Dehradun Uttarakhand 28 15 89 64 Indore Madhya Pradesh 32 18 89 65 Lucknow Uttar Pradesh 40 18

Ziel: - maximale Temperatur von bestimmten Zustand

Hier finden kommt unser Programm: -

import org.apache.spark._; 

object testfilter extends App { 
    val conf=new SparkConf().setMaster("local[2]").setAppName("testfilter") 
    val sc = new SparkContext(conf) 
    System.setProperty("hadoop.home.dir", "c://winutil//") 
    val input=sc.textFile("file:///D://sparkprog//temp//stats.txt") 
    val line=input.map(x=>x.split("\t")) 
    val city=line.map(x=>(x(3)+"\t" + x(4))) 
    val rdd3=city.map(x=>x.split("\t")) 
    val maintemp=rdd3.map(x=>((x(0),x(1)))) 
    val grp= maintemp.groupByKey() 
    val main = grp.map{case (x,iter) => (x,iter.toList.max)} 


    for (i<- main) 
    { 
    print(i) 
    print("\n") 
    } 

} 

Führen Sie das obige Programm und wir werden wie erhalten Ausgabe: - (Jammu und Kaschmir, 20) (Madhya Pradesh, 32)

(Bihar, 31) und so weiter ..

wichtig: - i nputs sind Tab getrennt

Verwandte Themen