基于Java开发的Spark篇(RDD)

package com.hj.spark;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;

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.Function;
import org.apache.spark.api.java.function.Function2;


public class PartitionRDD {

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// 配置SparkConf,设置应用名称,启用本地运行方式
		SparkConf conf = new SparkConf().setAppName("PartitionRDD").setMaster("local");
		// 创建SparkContext
		JavaSparkContext sc = new JavaSparkContext(conf);
//		mapDemo(sc);
//		flatMapDemo(sc);
//		groupByKeyDemo(sc);
		reduceByKey(sc);
	}
	// 将相同长度的字符串拼接到一起
	private static void reduceByKey(JavaSparkContext sc) {
		List<String> data = Arrays.asList("hadoop","hdfs","hello","world","hadoop","Java","Java","hello");
		JavaPairRDD<Integer, String> rdd = sc.parallelize(data).keyBy(new Function<String, Integer>() {

			@Override
			public Integer call(String str) throws Exception {
				// TODO Auto-generated method stub
				return str.length();
			}
		});
		JavaPairRDD<Integer, String> reduceByKeyRDD = rdd.reduceByKey(new Function2<String, String, String>() {
			
			@Override
			public String call(String str1, String str2) throws Exception {
				// TODO Auto-generated method stub
				return str1+"_"+str2;
			}
		});
		System.out.println(reduceByKeyRDD.collect());
	}
	
	// 将相同长度字符串放在同一个分区
	private static void groupByKeyDemo(JavaSparkContext sc) {
		List<String> data = Arrays.asList("hadoop","hdfs","hello","world","hadoop","Java","Java","hello");
		JavaPairRDD<Integer, String> rdd = sc.parallelize(data).keyBy(new Function<String, Integer>() {

			@Override
			public Integer call(String str) throws Exception {
				// TODO Auto-generated method stub
				return str.length();
			}
		});
		/*
		 * rdd
		 * <6,hadoop> <4,hdfs> <5,hello> <5,world>........
		 */
		JavaPairRDD<Integer, Iterable<String>> groupbyRDD = rdd.groupByKey();
		System.out.println(groupbyRDD.collect());
	}

	// flatMap
	private static void flatMapDemo(JavaSparkContext sc) {
		List<List<String>> list = Arrays.asList(Arrays.asList("hadoop spark hbase java","java scala hive"),
											Arrays.asList("java scala python"));
		JavaRDD<List<String>> strRDD = sc.parallelize(list);
		// [[hadoop spark hbase java, java scala hive],[java scala Python]]
		JavaRDD<String> flatMapRDD = strRDD.flatMap(new FlatMapFunction<List<String>, String>() {


			@Override
			public Iterator<String> call(List<String> strList) throws Exception {
				String[] addStrings = null;
				List<String> list = new ArrayList<String>();
				StringBuilder stringBuilder = new StringBuilder();
				// TODO Auto-generated method stub
				String str = ""; // 临时接收处理后字符串

				System.out.println("=============================="+strList.size());
				for (int i = 0; i < strList.size(); i++){
					stringBuilder.append(strList.get(i)+" ");
				}
				
				addStrings = stringBuilder.toString().split(" ");
				for(String word : addStrings){
					list.add(word);
				}
				/*
				 * 数组 -\->迭代器
				 * 数据--->列表
				 * 列表--->迭代器
				 */
				
				return list.iterator();
			}
		
		});
		System.out.println("原数据:"+strRDD.collect());
		System.out.println("变化后:"+flatMapRDD.collect());
		// 原数据:[[hadoop spark hbase java, java scala hive], [java scala python]]
		// 变化后:[hadoop, spark, hbase, java, java, scala, hive, java, scala, python]
	}

	private static void mapDemo(JavaSparkContext sc) {
		// 创建测试数据
		List<String> list = Arrays.asList("hadoop spark hbase java","java scala hive");
		JavaRDD<String> strRDD = sc.parallelize(list);
		// 输出 [hadoop spark hbase java, java scala hive]
		JavaRDD<String []> splitRDD = strRDD.map(new Function<String, String[]>() {

			@Override
			public String[] call(String v1) throws Exception {
				// TODO Auto-generated method stub			
				return v1.split(" ");
			} // 第一个参数:输入数据类型;第二个参数:输出数据类型		
		});
		// splitRDD:
		/*
		 * List(List(hadoop,spark,hbase,java),
		 * 		List(java,scala,hive))
		 */
		List<String[]> result = splitRDD.collect();
		for (int i = 0; i < result.size(); i++){
			for(String s: result.get(i)){
				System.out.println("Array "+i+" data:" + s);
			}
		}
	}

}

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目经测试过,真实可靠,请放心下载学习。这两个技术在大数据处理和Java Web开发中扮演着重要的角色。在此次总结中,我将回顾我所学到的内容、遇到的挑战和取得的进展。 首先,我开始了对Spark的学习。Spark是一个强大的分布式计算框架,用于处理大规模数据集。通过学习Spark,我了解了其基本概念和核心组件,如RDD(弹性分布式数据集)、Spark SQL、Spark Streaming和MLlib等。我学会了使用Spark编写分布式的数据处理程序,并通过调优技巧提高了程序的性能。在实践过程中,我遇到了一些挑战,比如调试复杂的数据流转和处理逻辑,但通过查阅文档和与同学的讨论,我成功地克服了这些困难。最终,我能够使用Spark处理大规模数据集,并通过并行化和分布式计算加速任务的执行。 其次,我开始了对Spring Boot的学习。Spring Boot是一种快速构建基于Spring框架的应用程序的方式。通过学习Spring Boot,我了解了其核心思想和基本原理,以及如何构建RESTful Web服务、使用数据库、进行事务管理等。我学会了使用Spring Boot快速搭建Java Web应用程序,并且能够运用Spring Boot的特性来简化开发流程。在学习的过程中,我遇到了一些挑战,比如配置文件的理解和注解的正确使用,但通过查阅官方文档和阅读相关书籍,我逐渐解决了这些问题。最终,我能够独立地使用Spring Boot开发Web应用程序,并运用其优秀的特性提高了开发效率。 总结来说,本学期我在Spark和Spring Boot方面取得了一定的进展。通过学习Spark,我掌握了分布式数据处理的基本原理和技巧,并通过实践应用到了大规模数据集的处理中。通过学习Spring Boot,我了解了现代化的Java Web开发方式,并通过实践构建了一些简单的Web应用程序。我还意识到在学习过程中遇到的困难和挑战是正常的,通过不断的努力和学习,我能够克服这些困难并取得进步。 在未来,我计划继续深入学习Spark和Spring Boot,扩展我的技术栈,提高自己的技能水平。我希望能够运用所学到的知识解决实际问题,并在项目中发挥作用。此外,我也希望能够不断拓宽自己的技术视野,学习其他相关的技术和框架,以便能够适应不同的项目需求。
### 回答1: 大数据开发工程师系列是指专门从事大数据开发的一类职业。Hadoop和Spark是大数据领域中最受欢迎的两个开源框架。 Hadoop是一个分布式计算框架,用于处理大规模数据集的分布式存储和计算。Hadoop的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分布存储在集群的多个节点上,MapReduce可以并行处理这些分布式数据。Hadoop具有高可靠性、高扩展性和高容错性的特点,并且还提供了许多其他工具和库,如Hive、Pig和HBase等。 Spark是一个快速、通用的大数据处理引擎,可以在多种数据源上进行高效的分布式计算。相比于Hadoop的MapReduce,Spark具有更快的数据处理速度和更强的扩展性。Spark提供了一个称为弹性分布式数据集(RDD)的抽象,可以在内存中高效地处理大规模数据集。此外,Spark还提供了许多高级组件和库,如Spark SQL、Spark Streaming和MLlib等,用于处理结构化数据、流式数据和机器学习。 作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop可以处理海量数据,并且具有高可靠性和容错性。而Spark则能够快速高效地处理大规模数据,并提供了更多的数据处理和分析功能。 大数据开发工程师需要熟悉Hadoop和Spark的使用和调优技巧,以及相关的编程语言和工具,如JavaScala和Python。他们需要了解数据处理的算法和模型,并能够设计和实现高效的分布式计算方案。此外,大数据开发工程师还需要具备良好的沟通能力和团队合作能力,能够与数据科学家和业务团队紧密合作,共同解决实际问题。 总之,大数据开发工程师系列是一个专门从事大数据开发的职业群体。而Hadoop和Spark则是这个职业群体中最重要的两个工具,他们分别用于大规模数据处理和分布式计算。掌握Hadoop和Spark的使用和优化技巧,是成为一名优秀的大数据开发工程师的关键能力。 ### 回答2: 大数据开发工程师系列主要涉及到两个重要的技术:Hadoop和Spark。 Hadoop是一个开源的分布式计算框架,主要用于存储和处理大规模数据集。它通过将数据分散存储在集群中的多个节点上,并在节点之间进行数据通信和计算,实现了数据的并行处理和高可靠性。Hadoop的核心工具是HDFS(Hadoop分布式文件系统)和MapReduce(一种用于分布式计算的编程模型)。HDFS用于将数据分布式存储在集群中,而MapReduce则是用于分布式计算的框架,通过将计算任务分解成多个小任务并在各个节点上并行执行,大大提高了数据处理的效率和性能。 Spark是当前最受欢迎的大数据计算框架之一,也是一个开源项目。与Hadoop相比,Spark具有更快的数据处理速度和更强大的功能。Spark提供了一个可扩展的分布式数据处理框架,支持数据处理、机器学习、图计算等多种大数据应用场景。与传统的基于磁盘的计算框架相比,Spark利用内存计算的优势,可以快速地对大规模数据进行处理和分析。此外,Spark还提供了丰富的API和开发工具,使开发人员可以更轻松地构建和调试大数据应用程序。 作为大数据开发工程师,掌握Hadoop和Spark是必不可少的。熟悉Hadoop的使用和原理,能够有效地存储和处理大规模数据集。而对于Spark的掌握,则可以提高数据处理的速度和效率,使得大数据分析和挖掘更加容易实现。因此,大数据开发工程师需要具备对Hadoop和Spark的深入理解和熟练应用,同时还需要具备数据分析、算法和编程等多方面的技能,以应对复杂的大数据挑战。 ### 回答3: 大数据开发工程师是一个专注于处理大数据的职位,主要负责使用各种工具和技术来处理和分析大规模的数据集。 Hadoop和Spark是目前在大数据处理领域中非常流行的两个开源工具。Hadoop是一个分布式系统基础架构,可以在集群中存储和处理大规模数据。它的核心是Hadoop分布式文件系统(HDFS)和MapReduce计算模型。HDFS将数据分散存储在集群的不同节点上,而MapReduce模型则提供了一种并行处理数据的方式。大数据开发工程师需要熟悉Hadoop的架构和命令行工具,能够编写MapReduce程序来处理数据。 Spark是一个快速和通用的大数据处理引擎,可以在大规模集群上执行数据处理任务。它拥有比Hadoop更高的性能和更丰富的功能。Spark提供了强大的机器学习、图计算和流处理等功能。大数据开发工程师需要熟悉Spark的API和编程模型,能够使用Spark的各种组建和工具进行数据处理和分析。 作为大数据开发工程师,掌握Hadoop和Spark是非常重要的。使用Hadoop和Spark可以有效地处理大规模数据,提取有价值的信息。大数据开发工程师通过编写和优化MapReduce程序来实现数据处理的需求,同时也能利用Spark提供的机器学习和流处理等功能来进行更复杂的数据分析。通过合理地使用Hadoop和Spark,大数据开发工程师可以减少数据处理的时间和成本,提高数据处理的效率和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值