如何将每个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的
- 翠菊