spark基础使用指南

一、使用java语言编写

步骤:

1、加载运行环境

2、加载数据(从本地加载或链接数据库)

3、处理数据或创建临时视图(视情况而定是否需要)

4、写SQL或自定义UDF函数或使用DSL

5、查询、显示

6、关闭

完整代码:

public class JavaSql03_local extends UDF {
    public static void main(String[] args) {
        //TODO 运行环境
        SparkSession sparkSession = SparkSession.builder().appName("JavaSql03_local").master("local[*]").getOrCreate();
        sparkSession.sparkContext().setLogLevel("WARN");

        //TODO 加载数据
        //从jdbc加载数据
        //方法一
        /*Dataset<Row> ds1 = sparkSession.read().format("jdbc")
                .option("url", "jdbc:mysql://localhost:3306/mydb")
                .option("driver","com.mysql.jdbc.Driver")
                .option("user", "root")
                .option("password", "123456")
                .option("dbtable", "person")
                .load();
        ds1.printSchema(); //输出字段类型
        ds1.show();*/

        //方法二
        Properties properties = new Properties();
        properties.put("user","root");
        properties.put("password","123456");
        Dataset<Row> ds2 = sparkSession.read()
                .jdbc("jdbc:mysql://localhost:3306/mydb", "person", properties);

        ds2.printSchema(); //输出字段类型
        ds2.show();

        //TODO 处理数据
        //创建视图
        //ds1.createOrReplaceTempView("tableName1");
        ds2.createOrReplaceTempView("person");

        //TODO 自定义UDF函数
//        sparkSession.udf().register("udfName",(String value)=>{
//            value.toUpperClass();
//        })


        //TODO ================SQL================================
        String sql = "SELECT " +
                " name," +
                " (age + 1) as nianl" +
                " FROM" +
                " `person`";
        sparkSession.sql(sql).show();

        sparkSession.sql(sql).createOrReplaceTempView("table1");
        int age = 12;
        //传递参数
        sparkSession.sql("select name,nianl from table1 where nianl = '"+age+"'").show();
        //sparkSession.sql("select name,nianl from person where nianl = '${age}'").show();

/**
 * +---+----+---+
 * | id|NAME|age|
 * +---+----+---+
 * |  1|  zs| 11|
 * |  2|  ls| 22|
 * |  3|  ww| 33|
 * +---+----+---+
 * */
        //TODO ================DSL================================
        System.out.println("=========DSL=========");
        ds2.select(col("age").plus(1)).show();

//        ds2.groupBy("name")
//                .count()
//                .orderBy(col("age").desc())  //使用col()需要引入包 import static org.apache.spark.sql.functions.col;
//                //.write()
//                //.mode(SaveMode.Overwrite)
//                //.jdbc()
//                .filter("") //过滤  相当于where
//                .agg(avg("age"),max("age"))//分类聚合函数,常与groupby连用
//                .show();
//                ;

//        //方法二
//        ds1.write().format("jdbc")
//                .option("url","jdbc:mysql//....")
//                .option("user","root")
//                .option("password","123")
//                .option("dbtable","t_table")
//                .mode(SaveMode.Append)
//                .save();

        //TODO 关闭
        sparkSession.stop();
    }


}

二、使用scala语言编写 

       scala是spark的主要编程语言,相较于java更简洁

上代码:

package spark.sql

import org.apache.spark.SparkContext
import org.apache.spark.sql.{DataFrame, DataFrameReader, Dataset, SaveMode, SparkSession}

import java.util.Properties

/**
 * 操作外部数据源
 * 支持多种文件格式、文件系统、数据库
 * 读:sparkSession.read.格式(text、json、jdbc)
 * 写:dataframe .write.格式(text、json、jdbc)
 * */
object SparkSql04_DataSource {
  def main(args: Array[String]): Unit = {
    //TODO 0、运行环境
    val sparkSession = SparkSession.builder().master("local[*]").getOrCreate()
    val sc: SparkContext = sparkSession.sparkContext
    sc.setLogLevel("WARN")
    import sparkSession.implicits._

    //TODO 1、加载数据
    val df: DataFrame = sparkSession.read.json("data/input/test.json")
    //sparkSession.read.jdbc("","","") //读取数据库内容
    df.show()

    val df1: DataFrame = sparkSession.read.format("jdbc")
      .option("url", "jdbc:mysql://localhost:3306/bootdo")
      .option("driver", "com.mysql.jdbc.Driver")
      .option("user", "root")
      .option("password", "123456")
      .option("dbtable", "promptInfo").load()

    df1.show()

    //TODO 2、处理数据
    val pop = new Properties()
    pop.setProperty("user","root")
    pop.setProperty("password","123456")
    df.coalesce(1)  //指定分区数
      .write.mode(SaveMode.Overwrite) //如果表存在则覆盖
      .jdbc("jdbc:mysql://localhost:3306/bootdo?characterEncoding=utf8","person",pop)
    
    val sqlStr: String =
      """
        |select value,count(*) as cNum
        |from t_words
        |group by value
        |order by value
        |""".stripMargin
    //stripMargin用来对齐每行字符串,每行用 | 开头
    sparkSession.sql(sqlStr).show()

    val ds: Dataset[String] = sparkSession.read.textFile("data/input/words.txt")
    //TODO 2、处理数据
    val words: Dataset[String] = ds.flatMap(_.split(" "))
    words.show()

    //TODO 创建表名
    words.createOrReplaceTempView("t_words")
    //TODO ==================DSL========================
    words.groupBy("value")
      .count()
      .orderBy('count.desc)
      .show()

    //TODO 关闭
    sparkSession.stop()
  }
case class Person(id:Int,name:String,age:Int)
}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值