Spark Streaming 的saveAsTextFiles遇到的坑

使用sparkStreaming消費數據,並使用Dstream的 saveAsTextFile保存數據到hdfs中,通過使用這個方法,生成的文件夾存在問題,

代碼例子如下:

    resultRdd.map(x=>x).saveAsTextFiles("hdfs:ip//data/storage/20181010/"+(new Date()))  //new Date()自行轉化

    ssc.start()

    ssc.awaitermination()


而hsfs中目錄顯示爲

   /data/storage/20181010/201810100708223-1547016648000

   /data/storage/20181010/201810100708223-1547016652000

   /data/storage/20181010/201810100708223-1547016658000

   .........................................


從中發現最後面多了一條橫槓 -和時間戳1547016648000,是根據間隔時間自動生成的,但是我不想要他後面的-1547016648000,

並且201810100708223日期固定住了

查看saveAsTextFiles源碼


def saveAsTextFiles(prefix: String, suffix: String = ""): Unit = ssc.withScope {

  val saveFunc = (rdd: RDD[T], time: Time) => {

    val file = rddToFileName(prefix, suffix,time)

    rdd.saveAsTextFile(file)

  }

  this.foreachRDD(saveFunc)

}

saveAsTextFiles方法中也是調用了saveAsTextFile方法,其中有個添加時間戳的方法。


於是我根據源碼自己使用foreachRDD,生成文件使用saveAsTextFile


resultRdd.foreachRDD{

rdd=>{}

rdd.map(x=>x).saveAsTextFile("hdfs:ip//data/storage/20181010/"+(new Date()))  //new Date()自行轉化

}



ssc.start()

ssc.awaitermination()


現在hsfs中目錄顯示爲

   /data/storage/20181010/201810100708223

   /data/storage/20181010/201810100708460


達到自己想要的結果,根據streaming 間隔時間生成文件夾,並其中包含文件。

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