大数据学习36:spark-core 和 spark-sql 学习
来源:互联网 发布:华策招聘 知乎 编辑:程序博客网 时间:2024/06/04 17:41
一、spark-core:
使用spark core 需要定义一个sparkConf ,再将 sparkConf 传入 SparkContext 获得一个 sc 实例。
val sparkConf = new SparkConf().setAppName( "Broadcast" ).setMaster( "local[3]" )
val sc = new SparkContext( sparkConf )
在定义一些函数,要使用到 sc ,需要将 sc 作为入参传入,
def commonJoin(sc: SparkContext): Unit = {
....
}
shell启动spark 运行
spark-shell --master local[2] --name "wxk"
val dataFile = sc.textFile("file:///root/data/sample_age_data.txt")
//1、取出年龄
val ageData = dataFile.map(x => x.split(" ")(1))
//2、求人数
val count = dataFile.count()
//3、年龄相加/人数
val totalage = ageData.map(age => age.toInt).reduce(_ + _)
val aveAge = totalage / count
用spark-submit 作业
spark-submit \
--class com.wxk.spark.AvgAgeCalculatorApp \
--master local[2] \
--name "wxk1" \
/root/spark-test/spark-train-1.0.jar
带有入参的spark-submit 作业
object WorldcountApp {
def main(args: Array[String]) {
val sparkConf = new SparkConf()
val sc = new SparkContext(sparkConf)
// 这里可以传入一个入参
val textFIle = sc.textFile(args(0),1)
val wc = textFIle.flatMap(line => line.split("\t")).map((_, 1))
.reduceByKey(_ + _)
//wc.collect().foreach(println)
val sorted = wc.map(x => (x._2, x._1)).sortByKey(false).map(x => (x._2, x._1))
sorted.max
sorted.saveAsTextFile(args(1))
sc.stop()
}
}
打包后:
spark-submit \
--class com.wxk.spark.WorldcountApp \
--master local[3] \
/root/spark-test/spark-train-1.0.jar \
hdfs://192.168.137.12:8020/sparktest/wc/wxkinput.txt \
hdfs://hadoop002:8020/sparktest/wc-output
二、spark-sql:
需要先将hive 中的 hive-site.xml 拷贝到 /opt/software/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf 下
通过idea 使用:
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().master( "local[3]" ).appName( "IPScount" ).getOrCreate()
调用方法需要传入 spark session 参数
runUDFIPScount( spark )
private def runUDFIPScount(spark: SparkSession): Unit = {
这里需要导入隐式转换和spark.sql.functions._
import spark.implicits._
import org.apache.spark.sql.functions._
.....
}
通过spark-shell 用法:
spark-shell --master local[2] --jars /root/mysql-connector-java-5.1.27-bin.jar
spark.sql("show tables ").show
scala> spark.sql("show tables").show
+--------+--------------------+-----------+
|database| tableName|isTemporary|
+--------+--------------------+-----------+
| default| a| false|
| default| dept| false|
| default| emp| false|
| default| mid_shipin| false|
| default| page_views| false|
| default| page_views_orc| false|
| default| page_views_orc_none| false|
| default| page_views_parquet| false|
| default|page_views_parque...| false|
| default|page_views_parque...| false|
| default| page_views_rc| false|
| default| page_views_reduce_3| false|
| default|page_views_reduce...| false|
| default| page_views_seq| false|
| default| page_views_snappy| false|
| default| shipin_origin| false|
+--------+--------------------+-----------+
连接的库是通过 hive-site.xml 创建的,通过拷贝hive的文件到spark conf 下,所以spark sql 和 hive 公用一套元数据
Spark-sql 用法:
spark-sql --master local[2] --jars /root/mysql-connector-java-5.1.27-bin.jar
spark-sql (default)> select * from emp;
7369 SMITH CLERK 7902 1980-12-17 800.0 NULL 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.0 300.0 30
7521 WARD SALESMAN 7698 1981-2-22 1250.0 500.0 30
7566 JONES MANAGER 7839 1981-4-2 2975.0 NULL 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.0 1400.0 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.0 NULL 30
7782 CLARK MANAGER 7839 1981-6-9 2450.0 NULL 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.0 NULL 20
7839 KING PRESIDENT NULL 1981-11-17 5000.0 NULL 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.0 0.0 30
7876 ADAMS CLERK 7788 1987-5-23 1100.0 NULL 20
7900 JAMES CLERK 7698 1981-12-3 950.0 NULL 30
7902 FORD ANALYST 7566 1981-12-3 3000.0 NULL 20
7934 MILLER CLERK 7782 1982-1-23 1300.0 NULL 10
spark 的默认压缩格式可以在 /opt/software/hadoop/etc/hadoop/mapred-site.xml 配置。
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
spark 中指定压缩格式:
bzip2
压缩率最高,压缩解压速度较慢,支持split。
import org.apache.hadoop.io.compress.BZip2Codec
rdd.saveAsTextFile("codec/bzip2",classOf[BZip2Codec])
snappy
json文本压缩率 38.2%,压缩和解压缩时间短。
import org.apache.hadoop.io.compress.SnappyCodec
rdd.saveAsTextFile("codec/snappy",classOf[SnappyCodec])
gzip
压缩率高,压缩和解压速度较快,不支持split,如果不对文件大小进行控制,下次分析可能可能会造成效率低下的问题。
json文本压缩率23.5%,适合使用率低,长期存储的文件。
import org.apache.hadoop.io.compress.GzipCodec
rdd.saveAsTextFile("codec/gzip",classOf[GzipCodec])
-----------------------------
parquet文件压缩
parquet为文件提供了列式存储,查询时只会取出需要的字段和分区,对IO性能的提升非常大,同时占用空间较小,即使是parquet的uncompressed存储方式也比普通的文本要小的多。
spark中通过sqlContext.write.parquet("path")
对parquet文件进行存储,默认使用的gzip压缩方式。
可以通过spark.sql.parquet.compression.codec参数或是在代码中进行修改。
parquet存储提供了lzo,gzip,snappy,uncompressed四种方式。
使用spark core 需要定义一个sparkConf ,再将 sparkConf 传入 SparkContext 获得一个 sc 实例。
val sparkConf = new SparkConf().setAppName( "Broadcast" ).setMaster( "local[3]" )
val sc = new SparkContext( sparkConf )
在定义一些函数,要使用到 sc ,需要将 sc 作为入参传入,
def commonJoin(sc: SparkContext): Unit = {
....
}
shell启动spark 运行
spark-shell --master local[2] --name "wxk"
val dataFile = sc.textFile("file:///root/data/sample_age_data.txt")
//1、取出年龄
val ageData = dataFile.map(x => x.split(" ")(1))
//2、求人数
val count = dataFile.count()
//3、年龄相加/人数
val totalage = ageData.map(age => age.toInt).reduce(_ + _)
val aveAge = totalage / count
用spark-submit 作业
spark-submit \
--class com.wxk.spark.AvgAgeCalculatorApp \
--master local[2] \
--name "wxk1" \
/root/spark-test/spark-train-1.0.jar
带有入参的spark-submit 作业
object WorldcountApp {
def main(args: Array[String]) {
val sparkConf = new SparkConf()
val sc = new SparkContext(sparkConf)
// 这里可以传入一个入参
val textFIle = sc.textFile(args(0),1)
val wc = textFIle.flatMap(line => line.split("\t")).map((_, 1))
.reduceByKey(_ + _)
//wc.collect().foreach(println)
val sorted = wc.map(x => (x._2, x._1)).sortByKey(false).map(x => (x._2, x._1))
sorted.max
sorted.saveAsTextFile(args(1))
sc.stop()
}
}
打包后:
spark-submit \
--class com.wxk.spark.WorldcountApp \
--master local[3] \
/root/spark-test/spark-train-1.0.jar \
hdfs://192.168.137.12:8020/sparktest/wc/wxkinput.txt \
hdfs://hadoop002:8020/sparktest/wc-output
二、spark-sql:
需要先将hive 中的 hive-site.xml 拷贝到 /opt/software/spark-2.2.0-bin-2.6.0-cdh5.7.0/conf 下
通过idea 使用:
import org.apache.spark.sql.SparkSession
val spark = SparkSession.builder().master( "local[3]" ).appName( "IPScount" ).getOrCreate()
调用方法需要传入 spark session 参数
runUDFIPScount( spark )
private def runUDFIPScount(spark: SparkSession): Unit = {
这里需要导入隐式转换和spark.sql.functions._
import spark.implicits._
import org.apache.spark.sql.functions._
.....
}
通过spark-shell 用法:
spark-shell --master local[2] --jars /root/mysql-connector-java-5.1.27-bin.jar
spark.sql("show tables ").show
scala> spark.sql("show tables").show
+--------+--------------------+-----------+
|database| tableName|isTemporary|
+--------+--------------------+-----------+
| default| a| false|
| default| dept| false|
| default| emp| false|
| default| mid_shipin| false|
| default| page_views| false|
| default| page_views_orc| false|
| default| page_views_orc_none| false|
| default| page_views_parquet| false|
| default|page_views_parque...| false|
| default|page_views_parque...| false|
| default| page_views_rc| false|
| default| page_views_reduce_3| false|
| default|page_views_reduce...| false|
| default| page_views_seq| false|
| default| page_views_snappy| false|
| default| shipin_origin| false|
+--------+--------------------+-----------+
连接的库是通过 hive-site.xml 创建的,通过拷贝hive的文件到spark conf 下,所以spark sql 和 hive 公用一套元数据
Spark-sql 用法:
spark-sql --master local[2] --jars /root/mysql-connector-java-5.1.27-bin.jar
spark-sql (default)> select * from emp;
7369 SMITH CLERK 7902 1980-12-17 800.0 NULL 20
7499 ALLEN SALESMAN 7698 1981-2-20 1600.0 300.0 30
7521 WARD SALESMAN 7698 1981-2-22 1250.0 500.0 30
7566 JONES MANAGER 7839 1981-4-2 2975.0 NULL 20
7654 MARTIN SALESMAN 7698 1981-9-28 1250.0 1400.0 30
7698 BLAKE MANAGER 7839 1981-5-1 2850.0 NULL 30
7782 CLARK MANAGER 7839 1981-6-9 2450.0 NULL 10
7788 SCOTT ANALYST 7566 1987-4-19 3000.0 NULL 20
7839 KING PRESIDENT NULL 1981-11-17 5000.0 NULL 10
7844 TURNER SALESMAN 7698 1981-9-8 1500.0 0.0 30
7876 ADAMS CLERK 7788 1987-5-23 1100.0 NULL 20
7900 JAMES CLERK 7698 1981-12-3 950.0 NULL 30
7902 FORD ANALYST 7566 1981-12-3 3000.0 NULL 20
7934 MILLER CLERK 7782 1982-1-23 1300.0 NULL 10
spark 的默认压缩格式可以在 /opt/software/hadoop/etc/hadoop/mapred-site.xml 配置。
<property>
<name>mapreduce.output.fileoutputformat.compress</name>
<value>true</value>
</property>
<property>
<name>mapreduce.output.fileoutputformat.compress.codec</name>
<value>org.apache.hadoop.io.compress.BZip2Codec</value>
</property>
spark 中指定压缩格式:
bzip2
压缩率最高,压缩解压速度较慢,支持split。
import org.apache.hadoop.io.compress.BZip2Codec
rdd.saveAsTextFile("codec/bzip2",classOf[BZip2Codec])
snappy
json文本压缩率 38.2%,压缩和解压缩时间短。
import org.apache.hadoop.io.compress.SnappyCodec
rdd.saveAsTextFile("codec/snappy",classOf[SnappyCodec])
gzip
压缩率高,压缩和解压速度较快,不支持split,如果不对文件大小进行控制,下次分析可能可能会造成效率低下的问题。
json文本压缩率23.5%,适合使用率低,长期存储的文件。
import org.apache.hadoop.io.compress.GzipCodec
rdd.saveAsTextFile("codec/gzip",classOf[GzipCodec])
-----------------------------
parquet文件压缩
parquet为文件提供了列式存储,查询时只会取出需要的字段和分区,对IO性能的提升非常大,同时占用空间较小,即使是parquet的uncompressed存储方式也比普通的文本要小的多。
spark中通过sqlContext.write.parquet("path")
对parquet文件进行存储,默认使用的gzip压缩方式。
可以通过spark.sql.parquet.compression.codec参数或是在代码中进行修改。
parquet存储提供了lzo,gzip,snappy,uncompressed四种方式。
阅读全文
0 0
- 大数据学习36:spark-core 和 spark-sql 学习
- 大数据Spark企业级实战版【学习笔记】----Spark技术生态系统之Spark Core
- 大数据Spark企业级实战版【学习笔记】----Spark Shark& Spark SQL
- 大数据Spark企业级实战版【学习笔记】-----交互式SQL处理框架Spark SQL
- Spark学习五:spark sql
- spark学习-18-Spark的Core理解
- 大数据Spark企业级实战版【学习笔记】---Spark简介
- 大数据Spark企业级实战版【学习笔记】----Spark术语
- 大数据Spark企业级实战版【学习笔记】----Spark Streaming
- 大数据Spark企业级实战版【学习笔记】----Spark Streaming
- Spark大数据学习资源汇总
- 大数据spark学习课程安排
- Spark大数据的学习历程
- Spark大数据学习资源汇总
- 大数据Hadoop与Spark学习经验谈
- 大数据学习-Spark前世今生
- 决胜Spark大数据时代企业级最佳实践:Spark Core&Spark SQL&GraphX&Machine Learning&Best Practice
- spark sql学习入门
- 购票系统
- java 多线程-信号量 Semaphore
- CSS-光标属性
- 深度学习框架哪家强?MXNet称霸CNN、RNN和情感分析,TensorFlow仅擅长推断特征提取
- 2017 12 05
- 大数据学习36:spark-core 和 spark-sql 学习
- Redis入门(二)— 在linux下搭建redis服务器
- 基于VMware虚拟机, Linux下的Nginx配置, 和外部主机访问配置
- QImage与cv::Mat之间的相互转换
- mysql之sql优化
- windows环境下使用TPC-H生成数据集
- 蓝桥杯练习题之十进制转十六进制
- “戏”说spark---spark Shuffle详解(一)
- JavaScript开发工具简明历史