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

问题描述 投票:4回答:2

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

这是输出的一个例子:


时间: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制作。正如我之前所说的,我想将这些结果永久存储到保存在某个地方的表中,并可能在以后查询它。所以我的问题是:有办法吗? 我很欣赏是否有人可以帮助我,但特别是告诉我是否可能。谢谢。

apache-spark pyspark apache-spark-sql spark-streaming spark-dataframe
2个回答
7
投票

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

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

Database, SQL, Integrated

Database, SQL, Connector

Database, NoSQL, Connector

Database, Document, Connector

Database, Graph, Connector

Search, Document, Connector

Data grid, SQL, Connector

Data grid, NoSQL, Connector

File System, Files, Integrated

  • HDFS

File System, Files, Connector

Datawarehouse, SQL, Connector


0
投票

而不是使用外部连接器更好地去火花结构流。

© www.soinside.com 2019 - 2024. All rights reserved.