我是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,但没有得到有用的东西,有人可以建议我如何检查每个步骤的输出。
感谢并问候阿米特
发布于 2016-04-19 23:41:15
请尝试下面的代码,它可能会有所帮助:
样本输入:- 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岁)等等。
重要提示:-输入用制表符分隔
https://stackoverflow.com/questions/36238883
复制相似问题