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

我一直在面对“Spark Streaming”关于将输出Dstream插入永久性 SQL表的问题。 我想插入每个输出DStream(来自单个批处理,火花进程)到一个独特的表。 我一直在使用Spark版本1.6.2的Python。

在我的代码的这一部分,我有一个Dstream的一个或多个RDD,我想永久插入/存储到SQL表中,而不会丢失每个处理的批处理结果。

rr = feature_and_label.join(result_zipped)\ .map(lambda x: (x[1][0][0], x[1][1]) ) 

这里的每个Dstream都被表示为这个元组的forms:( 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生成 。 正如我之前所说,我想将这些结果永久存储在某个地方保存的表中,并可能在稍后查询。 所以我的问题是:有没有办法做到这一点?
我很感激有人能帮我一把,但是特别告诉我这是否可能。 谢谢。

除非你已经下载了与HDFS打包在一起的版本(虽然他们似乎在玩Spark 2.0中的想法),但Vanilla Spark并没有提供持久化数据的方法。 将结果存储到永久表中并稍后查询这些结果的一种方法是使用Spark数据库生态系统中的各种数据库之一。 每个和你的用例都有利弊。 我会提供一个接近主列表的东西。 这些分割为:

数据pipe理的types,表单数据存储在,连接到Spark

数据库,SQL,集成

  • SnappyData

数据库,SQL,连接器

  • MemSQL
  • 哈纳
  • 库杜
  • FiloDB
  • DB2
  • SQLServer(JDBC)
  • Oracle(JDBC)
  • MySQL(JDBC)

数据库,NoSQL,连接器

  • 卡桑德拉
  • HBase的
  • 德鲁伊
  • Ampool
  • 了Riak
  • Cloudant

数据库,文档,连接器

  • MongoDB的
  • Couchbase

数据库,图表,连接器

  • Neo4j的
  • OrientDB

search,文档,连接器

  • Elasticsearch
  • Solr的

数据网格,SQL,连接器

  • 点燃

数据网格,NoSQL,连接器

  • Infinispan的
  • Hazelcast
  • Redis的

文件系统,文件,集成

  • HDFS

文件系统,文件,连接器

  • S3
  • Alluxio

Datawarehouse,SQL,连接器

  • 红移
  • 雪花
  • BigQuery的
  • 翠菊