2016-04-29 49 views
0

我是Spark/Scala Programming的新手。我可以使用maven進行設置,並且能夠運行示例字數統計程序。Spark Scala輸入/輸出目錄

我在這裏有2個問題在火花環境中運行/在Windows本地: 1.如何scala程序識別輸入。 2.如何將輸出寫入文本文件。

這裏是我的代碼

import org.apache.spark.SparkConf 
import org.apache.spark.SparkContext 
import org.apache.spark.rdd.RDD.rddToPairRDDFunctions 
object WordCount { 
def main(args: Array[String]) = { 

//Start the Spark context 
val conf = new SparkConf() 
    .setAppName("WordCount") 
    .setMaster("local") 
val sc = new SparkContext(conf) 

//Read some example file to a test RDD 
val textFile = sc.textFile("file:/home/root1/Avinash/data.txt") 

val counts = textFile.flatMap(line => line.split(" ")) 
      .map(word => (word, 1)) 
      .reduceByKey(_ + _) 
      counts.foreach(println) 
      counts.collect() 
    counts.saveAsTextFile("file:/home/root1/Avinash/output") 

} 

}

當我把文件中的文件:/home/root1/Avinash/data.txt並嘗試運行它沒有work.Only當我把/home/root1/softs/spark-1.6.1/bin中的data.txt文件或工作區中的項目文件夾內,它正在嘗試輸入。當我試圖用counts.saveAsTextFile(「file:/ home/root1/Avinash/output」)寫入輸出時,它不會寫入,而是拋出錯誤爲 Exception in thread「主「java.io.IOException:沒有文件系統的方案:D.

請幫我解決這個問題!!

回答

2

你想在文件上使用///。這是一個例子

val textFile = sc.textFile("file:///home/root1/Avinash/data.txt") 

val counts = textFile.flatMap(line => line.split(" ")) 
      .map(word => (word, 1)) 
      .reduceByKey(_ + _).cache() 

      counts.foreach(println) 
      //counts.collect() 
    counts.saveAsTextFile("file:///home/root1/Avinash/output") 

使用緩存來避免計算每一個你正在做的RDD行動的時間,如果該文件是大