scala讀取HDFS上的文件,每次讀取一行

用scala讀取一個只有字符的文件,該文件是已經清洗完的數據,有規律,一行是一條數據。
現在的需求是一次讀取文件中的一部分,依次讀取完。

之前用字節流偶爾出現亂碼,最後改成一次讀取一行了。
import java.io.{BufferedReader, InputStreamReader}

import org.apache.hadoop.fs.FSDataInputStream

/**
  * Created by wx on 2017/7/25.
  */
object ReadHDFSFileByLine {
  def main(args: Array[String]) {
    var inputStream: FSDataInputStream = null
    var bufferedReader: BufferedReader = null
    try {
      /* inputStream = HDFSUtil.getFSDataInputStream("hdfs://master:9000/TestData/aviation7/part-00018")
       bufferedReader = new BufferedReader(new InputStreamReader(inputStream))
       var lineTxt:String=null
       var count = 1
       // 這樣寫就是死循環,無法跳出,我很鬱悶改用下面的就好了
       while ((lineTxt= bufferedReader.readLine()) != null) {
         println(count + "\t" + lineTxt)
         count += 1
         //讓程序暫停睡眠一下
         Thread.sleep(1)
       }*/
      //獲取到HDFS的輸入流,可以參考上一篇文檔
      inputStream = HDFSUtil.getFSDataInputStream("hdfs://master:9000/TestData/aviation7/part-00018")
      //轉成緩衝流
      bufferedReader = new BufferedReader(new InputStreamReader(inputStream))
      //一次讀取一行
      var lineTxt: String = bufferedReader.readLine()
      var count = 1
      while (lineTxt != null) {
        println(count + "\t" + lineTxt)
        count += 1
        lineTxt = bufferedReader.readLine()
        //讓程序暫停睡眠一下
        Thread.sleep(1)
      }
    } catch {
      case e: Exception => e.printStackTrace()
    } finally {
      if (bufferedReader != null) {
        bufferedReader.close()
      }
      if (inputStream != null) {
        HDFSUtil.close
      }
    }
  }
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章