Scala Spark streaming:如何写入累积输出?

Scala Spark streaming:如何写入累积输出?,scala,apache-spark,spark-streaming,spark-dataframe,Scala,Apache Spark,Spark Streaming,Spark Dataframe,我必须为我的流媒体作业编写一个输出文件 问:我的工作什么时候才能真正停止?我杀死了服务器,但没有工作。 我想从命令行停止我的工作(如果可能的话) 代码: 根据定义,流没有结束,因此它不会停止,除非调用方法停止它。在我的例子中,我有一个业务条件,它告诉我流程何时完成,所以当我达到这一点时,我调用方法JavaStreamingContext.close()。我还有一个监视器,检查进程在过去几分钟内是否没有收到任何数据,在这种情况下,它也会关闭流 为了积累数据,必须使用updateStateByKey

我必须为我的流媒体作业编写一个输出文件

问:我的工作什么时候才能真正停止?我杀死了服务器,但没有工作。 我想从命令行停止我的工作(如果可能的话)

代码:


根据定义,流没有结束,因此它不会停止,除非调用方法停止它。在我的例子中,我有一个业务条件,它告诉我流程何时完成,所以当我达到这一点时,我调用方法JavaStreamingContext.close()。我还有一个监视器,检查进程在过去几分钟内是否没有收到任何数据,在这种情况下,它也会关闭流

为了积累数据,必须使用updateStateByKey方法(在PairDStream上)。此方法要求启用检查点


我检查了Spark代码,发现saveAsTextFiles使用foreachRDD,所以最后它会单独保存每个RDD,所以之前的RDD将不被考虑。使用UpDestestyByKy,它仍然可以保存多个文件,但是每个文件都会考虑以前处理过的所有RDDS。

无关,但是<代码>的目的是什么?MAP(A= > A)< /代码>?@ CRKETETY07请忽略这一点,我只是在试验一些东西。我不理解这个问题。您将在每个文件夹中获得30000毫秒的累积输出除非强制使用一个减速机,否则Park不会写入单个文件
mbeldar/class1
将成为一个目录。是的,你是对的。但这里的问题是,我得到的是1级,1级,2级。。。像这样的。我只想要一个文件夹class1
    import org.apache.spark.streaming.StreamingContext
    import org.apache.spark.streaming.StreamingContext._
    import org.apache.spark.streaming.dstream
    import org.apache.spark.streaming.Duration
    import org.apache.spark.streaming.Seconds
    import org.apache.spark._
    import org.apache.spark.SparkContext
    import org.apache.spark.SparkContext._
    import org.apache.spark.SparkConf
    import scala.collection.mutable.ArrayBuffer



    object MAYUR_BELDAR_PROGRAM5_V1 {

    def main(args: Array[String]) {

        val conf = new SparkConf().setMaster("local[2]").setAppName("NetworkWordCount")
        val ssc = new StreamingContext(conf, Seconds(10))

        val lines = ssc.socketTextStream("localhost", args(0).toInt)
        val words = lines.flatMap(_.split(" "))

        val class1 = words.filter(a => a.charAt(0).toInt%2==0).map(a => a).filter(a => a.length%2==0)
        val class2 = words.filter(a => a.charAt(0).toInt%2==0).map(a => a).filter(a => a.length%2==1)
    val class3 = words.filter(a => a.charAt(0).toInt%2==1).map(a => a).filter(a => a.length%2==0)
    val class4 = words.filter(a => a.charAt(0).toInt%2==1).map(a => a).filter(a => a.length%2==1)

    class1.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class1","txt")
    class2.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class2", "txt")
    class3.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class3","txt")
    class4.saveAsTextFiles("hdfs://hadoop1:9000/mbeldar/class4","txt")

    ssc.start()             // Start the computation
    ssc.awaitTermination()
    ssc.stop()

    }
    }