Spark: operación básica del caso de WordCount realizada a través de la API de Java y Scala

Principio experimental

El núcleo de Spark es RDD. Todas las operaciones en RDD se ejecutarán en el clúster. El programa Driver inicia muchos trabajadores. Los trabajadores leen datos en el sistema de archivos (distribuido) y los convierten en RDD (conjunto de datos distribuidos elásticos), y luego en RDD. se almacenan en caché y se calculan en la memoria.
inserte la descripción de la imagen aquí
RDD tiene dos tipos de operaciones, a saber, Acción (devolver valores) y Transformaciones (devolver un nuevo RDD).
inserte la descripción de la imagen aquí

1. Visualización de datos y preparación previa

Un sitio web de comercio electrónico registra una gran cantidad de datos de colección de productos de los usuarios y almacena los datos en un archivo llamado comprador_favorito 1. El formato de los datos y el contenido de los datos son los siguientes. Antes de realizar operaciones posteriores, habilite los servicios Hadoop y Spark
inserte la descripción de la imagen aquí
. Puede usar el comando jps para verificar si el proceso está completamente habilitado.

2. Crea un proyecto Scala

1. Entorno de desarrollo: eclipse

Abra Eclipse con el complemento Scala instalado y cree un nuevo proyecto Scala llamado spark4.
Cree un nuevo nombre de paquete en el proyecto spark4 y asígnele el nombre my.scala. Nombre el objeto scala ScalaWordCount.
inserte la descripción de la imagen aquí

2. Importe el paquete jar necesario para la ejecución.

Haga clic derecho en el proyecto y cree una carpeta llamada lib.
Importe el paquete jar, haga clic con el botón derecho en el paquete jar y haga clic en Build Path=>Add to Build Path. (Puede ir a mis recursos para descargar spark1.x hadoop2.x)

3. Escriba una declaración de Scala y cuente la cantidad de elementos que cada usuario recopila en los datos de recopilación de usuarios.
package my.scala  
import org.apache.spark.SparkConf  
import org.apache.spark.SparkContext  
object ScalaWordCount {  
    def main(args: Array[String]) {  
	    //创建Spark的配置对象sparkConf,设置Spark程序运行时的配置信息; 
        val conf = new SparkConf()  
        conf.setMaster("local")  .setAppName("scalawordcount")
		//创建SparkContext对象,SparkContext是Spark程序所有功能的唯一入口,无论采用Scala、Java还是Python都必须有一个SparkContext;  
        val sc = new SparkContext(conf)   
        val rdd = sc.textFile("hdfs://localhost:9000/myspark/buyer_favorite1")   //根据具体的数据来源,通过SparkContext来创建RDD;
        //对初始的RDD进行Transformation级别的处理。(首先将每一行的字符串拆分成单个的单词,然后在单词拆分的基础上对每个单词实例计数为1;
        //最后,在每个单词实例计数为1的基础上统计每个单词在文件出现的总次数)。
        rdd.map(line => (line.split("\t")(0), 1))  
           .reduceByKey(_ + _)  
           .collect()  
           .foreach(println)  
        sc.stop()  
    }  
}  

Los resultados de salida se ven en la consola de la interfaz de control.inserte la descripción de la imagen aquí

3. Crea un proyecto Java

Vuelva a hacer clic con el botón derecho en el nombre del proyecto, cree un nuevo paquete y asígnele el nombre my.java.
Haga clic derecho en el paquete my.java, cree una nueva clase y asígnele el nombre JavaWordCount.

1. Escriba código Java para contar la cantidad de elementos recopilados por cada usuario en los datos de recopilación de usuarios.
package my.java;  
import org.apache.spark.SparkConf;  
import org.apache.spark.api.java.JavaPairRDD;  
import org.apache.spark.api.java.JavaRDD;  
import org.apache.spark.api.java.JavaSparkContext;  
import org.apache.spark.api.java.function.FlatMapFunction;  
import org.apache.spark.api.java.function.Function2;  
import org.apache.spark.api.java.function.PairFunction;  
import scala.Tuple2;  
import java.util.Arrays;  
import java.util.List;  
import java.util.regex.Pattern;  
public final class JavaWordCount {  
 private static final Pattern SPACE = Pattern.compile("\t");  
 public static void main(String[] args) throws Exception {  
   SparkConf sparkConf = new SparkConf().setMaster("local").setAppName("JavaWordCount");  
   JavaSparkContext ctx = new JavaSparkContext(sparkConf);  
   JavaRDD<String> lines = ctx.textFile("hdfs://localhost:9000/myspark/buyer_favorite1");  
   JavaRDD<String> words = lines.flatMap(new FlatMapFunction<String, String>() {  
        @Override  
        public Iterable<String> call(String s) {  
            String word[]=s.split("\t",2);  
            return Arrays.asList(word[0]);  
        }  
    });  
   JavaPairRDD<String, Integer> ones = words.mapToPair(new PairFunction<String, String, Integer>() {  
        @Override  
        public Tuple2<String, Integer> call(String s) {  
            return new Tuple2<String, Integer>(s, 1);  
        }  
   });  
   JavaPairRDD<String, Integer> counts = ones.reduceByKey(new Function2<Integer, Integer, Integer>() {  
        @Override  
        public Integer call(Integer i1, Integer i2) {  
            return i1 + i2;  
            }  
        });  
   List<Tuple2<String, Integer>> output = counts.collect();  
   System.out.println(counts.collect());  
   counts.saveAsTextFile("hdfs://localhost:9000/myspark/out");  
   ctx.stop();  
  }  
}
2. Ver los resultados de salida en la terminal de Linux

Ejecute el siguiente comando para ver los resultados, siempre que se haya iniciado el clúster

hadoop fs -cat /myspark/out/part-00000  
escribir al final

Se puede ver a partir de esto que la superioridad del lenguaje Scala al escribir programas Spark es breve y concisa.

Supongo que te gusta

Origin blog.csdn.net/weixin_52323239/article/details/131600958
Recomendado
Clasificación