我正在使用Spark Streaming通过创建StreamingContext从Twitter获取推文:
val ssc = new StreamingContext("local[3]", "TwitterFeed",Minutes(1))
并创建twitter流为:
val tweetStream = TwitterUtils.createStream(ssc, Some(new OAuthAuthorization(Util.config)),filters)
然后将其保存为文本文件
tweets.repartition(1).saveAsTextFiles("/tmp/spark_testing/")
问题在于推文是基于批处理时间保存为文件夹的,但是我需要在同一个文件夹中将每个批次的所有数据保存。
有没有解决方法呢?
由于
答案 0 :(得分:0)
我们可以使用Spark SQL的新DataFrame保存API来执行此操作,该API允许附加到现有输出。默认情况下,saveAsTextFile将无法保存到包含现有数据的目录(请参阅https://spark.apache.org/docs/latest/sql-programming-guide.html#save-modes)。 https://spark.apache.org/docs/latest/streaming-programming-guide.html#dataframe-and-sql-operations介绍了如何设置Spark SQL上下文以与Spark Streaming一起使用。
假设您使用SQLContextSingleton从指南中复制部件,结果代码如下所示:
data.foreachRDD{rdd =>
val sqlContext = SQLContextSingleton.getInstance(rdd.sparkContext)
// Convert your data to a DataFrame, depends on the structure of your data
val df = ....
df.save("org.apache.spark.sql.json", SaveMode.Append, Map("path" -> path.toString))
}
(注意上面的例子使用JSON来保存结果,但你也可以使用不同的输出格式。)