我一直面临着关于将输出Dstream插入永久SQL表的“Spark Streaming”的问题。我想将每个输出DStream(来自单个批处理,激发进程)插入到一个唯一的表中。我一直在使用Spark与1.6版本的Spark。
在我的代码的这一部分,我有一个由一个或多个RDD组成的Dstream,我想永久地插入/存储到SQL表中,而不会丢失每个已处理批处理的任何结果。
rr = feature_and_label.join(result_zipped)\
.map(lambda x: (x[1][0][0], x[1][1]) )
这里的每个Dstream都表示如此元组:(4.0,0)。我不能使用SparkSQL,因为Spark处理'table'的方式,就像临时表一样,因此在每个批处理中都会丢失结果。
这是输出的一个例子:
(0.0, 2)
(4.0, 0)
(4.0, 0)
...
如上所示,每批只由一个Dstream制作。正如我之前所说的,我想将这些结果永久存储到保存在某个地方的表中,并可能在以后查询它。所以我的问题是:有办法吗? 我很欣赏是否有人可以帮助我,但特别是告诉我是否可能。谢谢。
Vanilla Spark没有提供一种保存数据的方法,除非您下载了与HDFS一起打包的版本(尽管它们看起来像是playing with the idea in Spark 2.0)。将结果存储到永久表并稍后查询这些结果的一种方法是使用Spark数据库生态系统中的各种数据库之一。每个都有利弊,您的用例很重要。我会提供一些接近主列表的东西。这些是按以下方式划分的:
而不是使用外部连接器更好地去火花结构流。