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:
(0,0, 2)
(4,0, 0)
(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:
Em vez de usar conectores externos, é melhor optar pelo streaming estruturado por centelha.