Como salvar / inserir cada DStream em uma tabela permanente

Eu tenho enfrentado um problema com o “Spark Streaming” sobre a inserção do Dstream de saída em uma tabela SQL permanente . Eu gostaria de inserir cada saída DStream (vinda de um único lote que faísca processos) em uma única tabela. Eu tenho usado o Python com uma versão do Spark 1.6.2.

Nesta parte do meu código, tenho um Dstream feito de um ou mais RDD que gostaria de inserir / armazenar permanentemente em uma tabela SQL sem perder nenhum resultado para cada lote processado.

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

Cada Dstream aqui é representado, por exemplo, como esta tupla: (4.0, 0). Não consigo usar o SparkSQL porque a maneira como o Spark trata a ‘tabela’, ou seja, como uma tabela temporária , perdendo, portanto, o resultado em cada lote.

Este é um exemplo de saída:


Hora: 2016-09-23 00:57:00

(0,0, 2)


Hora: 2016-09-23 00:57:01

(4,0, 0)


Hora: 2016-09-23 00:57:02

(4,0, 0)

Como mostrado acima, cada lote é feito por apenas um Dstream . Como eu disse antes, gostaria de armazenar permanentemente esses resultados em uma tabela salva em algum lugar e possivelmente consultá-la posteriormente. Então, minha pergunta é: existe uma maneira de fazer isso?
Eu apreciaria se alguém pode me ajudar com isso, mas especialmente me dizendo se é possível ou não. Obrigado.

O Vanilla Spark não fornece uma maneira de persistir dados, a menos que você tenha baixado a versão empacotada com o HDFS (embora eles pareçam estar jogando com a ideia no Spark 2.0 ). Uma maneira de armazenar os resultados em uma tabela permanente e consultar esses resultados posteriormente é usar um dos vários bancos de dados do Spark Database Ecosystem. Há prós e contras para cada um e seu caso de uso é importante. Eu vou fornecer algo perto de uma lista principal. Estes são segmentados por:

Tipo de gerenciamento de dados, dados de formulário são armazenados em conexão com o Spark

Banco de Dados, SQL, Integrado

  • SnappyData

Banco de Dados, SQL, Conector

  • MemSQL
  • Hana
  • Kudu
  • FiloDB
  • DB2
  • SQLServer (JDBC)
  • Oracle (JDBC)
  • MySQL (JDBC)

Banco de Dados, NoSQL, Connector

  • Cassandra
  • HBase
  • druida
  • Ampool
  • Riak
  • Aerospike
  • Cloudant

Banco de Dados, Documento, Conector

  • MongoDB
  • Couchbase

Banco de dados, Graph, Connector

  • Neo4j
  • OrientDB

Pesquisa, documento, conector

  • Elasticsearch
  • Solr

Grade de dados, SQL, Connector

  • Inflamar

Grade de dados, NoSQL, Connector

  • Infinispan
  • Hazelcast
  • Redis

Sistema de Arquivos, Arquivos Integrados

  • HDFS

Sistema de arquivos, arquivos, conector

  • S3
  • Alluxio

Datawarehouse, SQL, Conector

  • Redshift
  • Floco de neve
  • BigQuery
  • Áster

Em vez de usar conectores externos, é melhor optar pelo streaming estruturado por centelha.