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()
}
}