20200617sparksql学习笔记

sparksql学习笔记

wordcount

    
    object xxx{
    def main(args:Array[String]){
    val sparkConf = new SparkConf().setMaster("local").setAppName("xxx")
    val sc = new SparkContext(sparkConf)


    val rdd = sc.textFile("xxxx")

    rdd.flatmap(_.split(",")).map(word =>(word,1)).reduceByKey(_+_),collect().foreach(println)


//按照单词结果次数降序排
    rdd.flatMap(_.split(",")).map(word=>(word,1)).reduceByKey(_+_).map(x =>(x._2,x._1)).sortByKey(false).map(x=>(x._2,x._1))
      .saveAsTextFile("file:///Users/dongheng/Desktop/code-ali/studyscala/sparksql-train/src/output")

rdd.flatMap(_.split(",")).map(word=>(word,1)).reduceByKey(_+_).map(x=>(x._2,x_1)).sortByKey(false).map(x=>(x._2,x._1)).collect


    sc.stop()
        }
    }


./spark-shell --master local
打包我们的应用程序,让其运行在local模式下

如何运行jar包呢?
    ./spark-submit \
--class  com.imooc.bigdata.chapter02.SparkWordCountAppV2 \
--master local \
/home/hadoop/lib/sparksql-train-1.0.jar \
file:///home/hadoop/data/wc.data file:///home/hadoop/data/out 


如何提交Spark应用程序到YARN上执行
./spark-submit \
--class  com.imooc.bigdata.chapter02.SparkWordCountAppV2 \
--master yarn \
--name SparkWordCountAppV2 \
/home/hadoop/lib/sparksql-train-1.0.jar \
hdfs://hadoop000:8020/pk/wc.data hdfs://hadoop000:8020/pk/out

要将Spark应用程序运行在YARN上,一定要配置HADOOP_CONF_DIR或者YARN_CONF_DIR
指向$HADOOP_HOME/etc/conf


local和YARN模式   重点掌握

Standalone  了解
    多个机器,那么你每个机器都需要部署spark

相关配置:
$SPARK_HOME/conf/slaves
    hadoop000
$SPARK_HOME/conf/spark-env.sh
    SPARK_MASTER_HOST=hadoop000

启动Spark集群 
    $SPARK_HOME/sbin/start-all.sh

    jps: Master  Worker

./spark-submit \
--class  com.imooc.bigdata.chapter02.SparkWordCountAppV2 \
--master spark://hadoop000:7077 \
--name SparkWordCountAppV2 \
/home/hadoop/lib/sparksql-train-1.0.jar \
hdfs://hadoop000:8020/pk/wc.data hdfs://hadoop000:8020/pk/out2

不管什么运行模式,代码不用改变,只需要在spark-submit脚本提交时
通过--master xxx 来设置你的运行模式即可


Spark SQL是什么
    Spark SQL is Apache Spark's module for working with structured data.
    误区一:Spark SQL就是一个SQL处理框架

    1)集成性:在Spark编程中无缝对接多种复杂的SQL
   
      2)统一的数据访问方式:以类似的方式访问多种不同的数据源,而且可以进行相关操作
        spark.read.format("json").load(path)
        spark.read.format("text").load(path)
        spark.read.format("parquet").load(path)
        spark.read.format("json").option("...","...").load(path)
    3) 兼容Hive
        allowing you to access existing Hive warehouses
        如果你想把Hive的作业迁移到Spark SQL,这样的话,迁移成本就会低很多
    4)标准的数据连接:提供标准的JDBC/ODBC连接方式   Server


    Spark SQL应用并不局限于SQL
    还支持Hive、JSON、Parquet文件的直接读取以及操作
    SQL仅仅是Spark SQL中的一个功能而已


使用spark shell 做sql

//看到视频上直接用spark-shell --master local[2] 我这样报错,必须要用下面的

spark-shell --master local[2] --jars ~/lib/mysql-cr-java-5.1.38.jar
spark.sql("show databases").show


spark-shell启动流程分析
REPL: Read-Eval-Print Loop  读取-求值-输出
提供给用户即时交互一个命令窗口


spark-sql执行流程分析
    spark-sql底层调用的也是spark-submit
    因为spark-sql它就是一个Spark应用程序,和spark-shell一样
    对于你想启动一个Spark应用程序,肯定要借助于spark-submit这脚本进行提交
    spark-sql调用的类是org.apache.spark.sql.hive.thriftserver.SparkSQLCLIDriver
    spark-shell调用的类是org.apache.spark.repl.Main

 R/Pandas 能做数据分析   但是是单机

    A Dataset is a distributed collection of data
    A DataFrame is a Dataset organized into named columns
        以列(列名、列类型、列值)的形式构成的分布式数据集


   It is conceptually equivalent to a table in a relational database or a data frame in R/Python
        DF = Table  ==> SQL

    In Scala and Java, a DataFrame is represented by a Dataset of Rows

    提供了很多方法的支持

    在日常开发过程中,我们使用Spark SQL来进行日志处理(90%)
你要处理一个目录下或者指定文件的日志数据,数据格式是文本类型的
直接使用spark.read.text(path)读进来之后,就是只有一个string类型的名字为value的值

1)uses reflection to infer the schema of an RDD that contains specific types of objects
2)creating Datasets is through a programmatic interface that allows you to construct a schema and then apply it to an existing RDD

对于字段比较少的场景,个人倾向于使用第一种
对于字段比较多的场景,个人倾向于使用第二种,自己灵活定制

编程方式实现的三步曲
1)Create an RDD of Rows from the original RDD;
2)Create the schema represented by a StructType matching the structure of Rows in the RDD created in Step 1.
3)Apply the schema to the RDD of Rows via createDataFrame method provided by SparkSession.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值