Spark的基本使用入门

测试案例类

case class Player(name:String,age:Int,gender:String)

引入相关pom

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.11</artifactId>
    <version>2.3.2-mdh1.0.0-SNAPSHOT</version>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.11</artifactId>
    <version>2.3.2-mdh1.0.0-SNAPSHOT</version>
</dependency>

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.11</artifactId>
    <version>2.3.2-mdh1.0.0-SNAPSHOT</version>
</dependency>

1、自建rdd,并完成rdd-dataframe-dataset之间的相互转化

def method1():Unit={
    //master在本地设置为local,在线上集群应该设置为yarn
    val spark: SparkSession = SparkSession.builder().appName("test1").master("local[*]").getOrCreate()
    val sparkContext: SparkContext = spark.sparkContext
    //自建rdd,利用List区分行条目,利用元组区分列信息,自建rdd的api makeRDD实际调用的是parallelize,parallelize即将集合创建为rdd
    val rdd1: RDD[(String, Int, String)] = sparkContext.makeRDD(List(("jack", 11, "male"), ("lisa", 12, "female")))
    rdd1.foreach(println)
    //隐式参数
    import spark.implicits._
    //rdd转dataframe,toDF内可以指定列名
    val df1: DataFrame = rdd1.toDF("name","age","gender")
    df1.show()
    //把rdd的元组映射为案例类,然后转为dataset
    val ds1: Dataset[Player] = rdd1.map(x => Player(x._1, x._2, x._3)).toDS()
    ds1.show()
    //把dataframe、dataset转为rdd后逐条打印
    df1.rdd.foreach(println)
    ds1.rdd.foreach(println)
    //dataframe转为dataset
    val ds2: Dataset[Player] = df1.as[Player]
    ds2.show()
    //dataset转为dataframe,再次用toDF指定新的列名
    val df2: DataFrame = ds1.toDF("nm", "ag", "sex")
    df2.show()
  }

2、利用rdd读取本地文件,实现WordCount

def method2():Unit={
    val sparkConf: SparkConf = new SparkConf().setAppName("test2").setMaster("local[*]")
    val sparkContext: SparkContext = new SparkContext(sparkConf)
    //textFile与parrallelize相对,是从外部读取文件创建rdd,其中rdd把文件按照行来区分条目
    val rddFile: RDD[String] = sparkContext.textFile("src/main/resources/myfile/goodjob.txt")
    //对rdd内每条数据split按照空格拆分为数组,对rdd数据直接flatMap拍平为单词rdd集,然后map创建元组,在对元组reduceByKey以_1为基准,相同则把_2的值相加,得到最终结果
    val rddResult: RDD[(String, Int)] = rddFile.flatMap(_.split(" ")).map((_, 1)).reduceByKey(_ + _)
    rddResult.foreach(println)
    //saveAsTextFile写入文件
    rddResult.saveAsTextFile("src/main/resources/myfile/result.txt")
  }

3、spark操作Hive

def method3():Unit={
    //注意spark操作hive时,需要加上enableHiveSupport
    val sparkSession: SparkSession = SparkSession.builder().appName("test3").master("local[*]").enableHiveSupport().getOrCreate()
    //先创建hive表player和player2
    sparkSession.sql("create table meta.player(name string,age int,gender string);")
    sparkSession.sql("create table meta.player2(name string,age int,gender string);")
    //新增数据到player
    sparkSession.sql("insert into table meta.player values('wangming',11,'male');")
    sparkSession.sql("insert into table meta.player values('yuki',12,'female');")
    sparkSession.sql("insert into table meta.player values('lili',13,'female');")

    //测试故意修改列名
    val df: DataFrame = sparkSession.sql("select * from meta.player where age < 12").toDF("a","b","c")
    //利用dataframe创建临时会话视图,后续sql的执行,将在此视图上执行   createOrReplaceTempView->在 Spark Session 中使用 SparkDataFrame 创建一个新的临时视图。如果已存在同名的临时视图,则替换它。
    df.createOrReplaceTempView("tv1")
    sparkSession.sql("insert into meta.player2(name,age,gender) select a,b,c from tv1")
  }

4、spark操作Mysql

def method4():Unit={
    val sparkSession: SparkSession = SparkSession.builder().appName("test3").master("local[*]").enableHiveSupport().getOrCreate()
    val df1: DataFrame = sparkSession.read.format("jdbc").option("url", "jdbc:mysql://localhost:3306/my_test").option("user", "root").option("password", "123456").option("dbtable", "ui").load()
    df1.createOrReplaceTempView("tv1")
    val df2: DataFrame = sparkSession.sql("select * from tv1 where age <20")
    df2.write.mode("append").format("jdbc").option("url", "jdbc:mysql://localhost:3306/my_test?useUnicode=true&characterEncoding=utf8&useSSL=false&zeroDateTimeBehavior=convertToNull&jdbcCompliantTruncation=false").option("user", "root").option("password", "123456").option("dbtable","ui2").save()
  }
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spark 3.0从入门到精通》课件是针对Apache Spark 3.0版本设计的一套学习教材。Spark是一种快速、可扩展的大数据处理框架,具有高效的数据处理能力和强大的分布式计算功能,被广泛应用于大数据分析和机器学习等领域。 这套课件以入门到精通的路径,逐步介绍Spark 3.0的核心概念、基本使用方法和高级特性。首先,课件会对Spark的历史背景、发展现状进行介绍,以及Spark 3.0版本相较之前版本的新特性和改进。接着,课程将深入讲解Spark的核心组件,包括Spark Core、Spark SQL、Spark Streaming、Spark MLlib和Spark GraphX,以及它们在大数据处理和机器学习中的应用。 除了理论知识的传授,课件还会通过大量的实例演示和实践操作,帮助学员快速上手和理解Spark使用。学员将学习如何使用Spark进行数据读取和处理、数据清洗和转换、数据分析和可视化、机器学习模型构建和评估等任务。同时,课件还会介绍一些高级的Spark特性,如图计算、流处理和分布式机器学习等,以帮助学员进一步提升对Spark的理解和应用能力。 《Spark 3.0从入门到精通》课件不仅适合初学者,也适合有一定Spark基础的学员进一步提升技能。通过系统学习课件的内容,学员可以全面掌握Spark基本原理和使用方法,并能够利用Spark解决实际的大数据处理和机器学习问题。课件还提供了丰富的实验和项目案例,以帮助学员巩固所学知识,并提供进一步的实践指导和学习资源。 总之,《Spark 3.0从入门到精通》课件是一套全面系统的学习教材,通过深入浅出的讲解和实践操作,帮助学员快速掌握Spark的核心概念和使用技巧,成为精通Spark的专家。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值