如何将每个DStream保存/插入永久表

时间:2016-09-22 23:22:23

标签: apache-spark pyspark apache-spark-sql spark-streaming spark-dataframe

我一直面临着关于将输出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'的方式,就像临时表一样,因此在每个批处理中都会丢失结果。

这是输出的一个例子:

时间:2016-09-23 00:57:00

(0.0,2)

时间:2016-09-23 00:57:01

(4.0,0)

时间:2016-09-23 00:57:02

(4.0,0)

...

如上所示,每个批次仅由一个 Dstream 制作。正如我之前所说的,我想将这些结果永久存储到保存在某个地方的表中,并可能在以后查询它。所以我的问题是: 有办法吗?
我很欣赏是否有人可以帮助我,但特别是告诉我是否可能。 谢谢。

2 个答案:

答案 0 :(得分:7)

除非您下载了与HDFS一起打包的版本(尽管它们看起来像playing with the idea in Spark 2.0),但Vanilla Spark不提供保留数据的方法。将结果存储到永久表并稍后查询这些结果的一种方法是使用Spark数据库生态系统中的各种数据库之一。每个都有利弊,您的用例很重要。我会提供一些接近主列表的东西。这些细分为:

数据管理类型,表单数据存储,与Spark的连接

数据库,SQL,集成

数据库,SQL,连接器

数据库,NoSQL,连接器

数据库,文档,连接器

数据库,图形,连接器

搜索,文档,连接器

数据网格,SQL,连接器

数据网格,NoSQL,连接器

文件系统,文件,集成

  • HDFS

文件系统,文件,连接器

Datawarehouse,SQL,Connector

答案 1 :(得分:0)

不是使用外部连接器,而是使用火花结构化流媒体。