2016-03-26 35 views
0

我是scala的新手,我嘗試從Hadoop權威指南中執行程序最高溫度,但它在最後一次拋出錯誤數組超出限制的異常。而且我無法清楚地理解書中的代碼。根據權威指南的火花最高溫度示例

下面是代碼

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(_)) 
} 
} 

我只得到他們正在閱讀的文件和分裂和地圖功能後,我沒有得到試圖打破分割和地圖功能,以不同的RDD點但沒有得到有用的東西,任何人都可以建議我如何檢查每個步驟的輸出。

感謝&問候 阿米特

+3

哪一行給出異常?此外,由於有明確的索引,用於「rec」,因此您依賴於輸入文件的格式,並且每行至少有3個內容 - 所以您可以說出看起來像什麼? –

+0

問題在於輸入文本文件的格式。不應該有空行,並且每行都應該有3個或更多的製表符分隔變量。 – gonephishing

+0

嗨,我正在嘗試處理這些文件的行,但是沒有出現在行中,我可能不知道在哪裏必須通過製表符分隔行,以便我可以獲得期望的結果。 0067011990999991949010107004 + 68750 + 023550FM-12 + 038299999V0201801N006719999999N9999999N9-00281 + 99999999999ADDAA199000591AY131999GF108991999999999999999999KA1999N-01001MW1101 0043011990999991949010112004 + 68750 + 023550FM-12 + 038299999V0201801N006719999999N9999999N9-00281 + 99999999999ADDAY131999GF108991999999999999999999MW1361 –

回答

0

請嘗試下面的代碼可能是它可以幫助: -

樣品輸入: - 91 67阿格拉北方邦33 19 90 67阿拉哈巴德北方邦32 19 87 60阿姆利則旁遮普30 15 89 66博帕爾中央邦32 19 87 62昌迪加爾昌迪加爾30 17 82 60德拉敦北阿坎德邦28 15 89 印多64中央邦32 18 89 65勒克瑙北方邦40 18

目的: - 找到特定狀態

這裏的最高溫度達到我們的節目: -

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") 
    } 

} 

運行上面的程序,我們會得到這樣的輸出: - (查謨和克什米爾,20)(中央邦,32)

(比哈爾邦,31)等..

重要: - I 輸入是製表符分隔

相關問題