Classificação de operadores de faísca
De uma perspectiva geral, os operadores de faísca podem ser divididos aproximadamente nas duas categorias a seguir:
1) Operador de transformação/conversão de transformação: Esta transformação não aciona o envio do trabalho e conclui o processamento intermediário do processo do trabalho.
As operações de transformação são cálculos atrasados, o que significa que a operação de conversão para gerar outro RDD a partir de uma conversão RDD não é executada imediatamente. Requer esperar até que uma operação de ação esteja disponível antes que a operação seja acionada.
2) Operador de ação de ação: Este tipo de operador acionará o SparkContext para enviar um trabalho.
O operador de ação acionará o trabalho de envio de Spark (Job) e produzirá os dados para o sistema Spark.
De uma pequena perspectiva, os operadores de faísca podem ser divididos aproximadamente nas três categorias a seguir:
1) Operador de transformação do tipo de dados de valor. Essa transformação não aciona o envio do trabalho. Os itens de dados processados são dados do tipo valor.
2) O operador de transfromação do tipo de dados de valor-chave. Essa transformação não aciona o envio do trabalho. Os itens de dados para processamento são pares de dados de valor-chave.
3) Operador de ação, esse tipo de operador acionará o SparkContext para enviar um emprego.
introdução
Geralmente, é mais conveniente escrever programas Spark com Scala, afinal, o código -fonte da Spark é escrito em Scala. No entanto, existem muitos desenvolvedores de Java atualmente, especialmente quando os serviços e serviços on -line. Neste momento, você precisa dominar alguns métodos de uso do Spark em Java.
1. Mapa
O mapa não pode ser usado com mais frequência ao processar e converter dados
Antes de usar o MAP, você deve primeiro definir um formato de função transformado da seguinte maneira:
Function <string, etc. int rowsize = rowarr.length; duplo [] Doublearr = novo duplo [ROWSIZE-1]; // Exceto pela primeira vez, o restante da peça é analisado em um dobro e colocado na matriz para (int i = 1; i <rowsize; i ++) {string cada = rowarr [i]; Doublearr [i] = duplo.parsedouble (cada); } // Converta os dados que você acabou de obter em um recurso vetor vetorial = vetores.dense (Doublearr); etiqueta dupla = duplo.parseDouble (Rowarr [0]); // Construa o formato de dados para classificação Label Point Point Point = new LabeledPoint (Rótulo, Recurso); ponto de retorno; }};Atenção especial deve ser dada a:
1. A entrada do método de chamada deve ser o tipo de linha de dados antes da conversão. O valor de retorno deve ser o tipo de linha de dados após o processamento.
2. Se uma classe personalizada for chamada no método de conversão, observe que o nome da classe deve ser serializado, por exemplo
classe pública Treeensemble implementa serializável {}3. Se alguns objetos de classe forem chamados na função de conversão, como o método precisará chamar um parâmetro externo ou um modelo de processamento numérico (padronização, normalização etc.), o objeto precisa ser declarado final.
Então chame a função de conversão quando apropriado
JAVARDD <BoeldEdPoint> rdd = oridata.tojavardd (). Map (transform);
Este método requer a conversão de RDD comum em Javardd para usar. A operação de conversão para Javardd não é demorada, então não se preocupe
2. Filtro
Também é muito comumente usado em cenários, como evitar valores nulos de dados e 0s, e pode cumprir as funções de onde no SQL
Primeiro de tudo, precisamos definir uma função. O efeito real de retornar um valor booleano, dada uma linha de dados, é reter os dados retornados ao TRUE.
Função <string, boolean> boolfilter = nova função <string, boolean> () {// string é o tipo de entrada de uma determinada linha. Booleano é o tipo de saída correspondente. Usado para determinar se os dados são retidos. @Override public boolean Call (string line) lança Exceção {// Reescreva o método de chamada sinalizador booleano = linha! = Null; bandeira de retorno; }};Geralmente, o que precisa ser modificado no uso real dessa função é apenas o tipo de linha, ou seja, o tipo de entrada da linha de dados. Ao contrário da função de conversão acima, o valor de retorno deste método de chamada deve ser corrigido como booleano.
Então o método de chamada
Javardd <tabeledPoint> rdd = oridata.tojavardd (). Filtro (boolfilter);
3. MAPTOPAIR
Esse método é um pouco semelhante ao método do mapa e também executa algumas conversões para os dados. No entanto, a saída desta função é uma linha de entrada de tupla. O método mais comumente usado é fazer validação cruzada ou de recuperação de erro estatístico AUC, etc.
Da mesma forma, você precisa definir uma função de conversão primeiro
Function <string, boolean> transformador = new parfunção <etiquededpoint, object, object> () {// RoteledPoint são os dois objetos após o tipo de entrada. Não altere a chamada de tuple2 pública @Override (LoteledPoint Row) lança exceção {// Reescreva o método de chamada geralmente altera apenas os parâmetros de entrada e a saída. Não altere a dupla previcton = thismodel.predict (Row.Features ()); etiqueta dupla = row.label (); retornar novo tuple2 (Predicton, etiqueta); }});Em relação à classe de chamada e pelo objeto de classe, os requisitos são consistentes com a anterior. A classe precisa ser serializada e o objeto de classe precisa ser declarado como tipo final
As chamadas correspondentes são as seguintes:
Javapairrdd <objeto, objeto> previstionsandlabels = oridata.maptopair (transformador);
Então, para o uso de previsões e labels, calcule a precisão, recall, precisão e AUC. Haverá no próximo blog. Por favor, fique atento.
Resumir
O acima é o conteúdo inteiro deste artigo. Espero que o conteúdo deste artigo tenha certo valor de referência para o estudo ou trabalho de todos. Se você tiver alguma dúvida, pode deixar uma mensagem para se comunicar. Obrigado pelo seu apoio ao wulin.com.