我一直面临着关于将输出Dstream插入永久 SQL表的“Spark Streaming”问题。我想将每个输出DStream(来自单个批处理,激发进程)插入到一个唯一的表中。我一直在使用Python版本1.6.2。
在我的代码的这一部分,我有一个由一个或多个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 制作。正如我之前所说的,我想将这些结果永久存储到保存在某个地方的表中,并可能在以后查询它。所以我的问题是:
有办法吗?
我很欣赏是否有人可以帮助我,但特别是告诉我是否可能。
谢谢。
答案 0 :(得分:7)
除非您下载了与HDFS一起打包的版本(尽管它们看起来像playing with the idea in Spark 2.0),但Vanilla Spark不提供保留数据的方法。将结果存储到永久表并稍后查询这些结果的一种方法是使用Spark数据库生态系统中的各种数据库之一。每个都有利弊,您的用例很重要。我会提供一些接近主列表的东西。这些细分为:
答案 1 :(得分:0)
不是使用外部连接器,而是使用火花结构化流媒体。