spark学习常用的操作
首先,使用 ScalaIDE 或 IDEA 创建 Scala 的 Maven 工程。需要用到 spark-core,spark-sql,spark-streaming 的 jar 包,pom 文件如下:
<properties>
<spark.version>2.1.0</spark.version>
<scala.version>2.11</scala.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
一、创建 SparkContext 对象
package core
import org.apache.spark.SparkConf
import org.apache.spark.SparkContext
import org.apache.log4j.Logger
import org.apache.log4j.Level
object Demo {
def main(args: Array[String]): Unit = {
// Spark使用log4j打印日志,为了避免程序执行过程中产生过多的日志,添加如下两行代码
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
// 先创建SparkConf,再通过SparkConf创建SparkContext
val conf = new SparkConf().setAppName("demo").setMaster("local")
val sc = new SparkContext(conf)
// 进行词频统计
val rdd = sc.textFile("hdfs://qujianlei:9000/data/data.txt").
flatMap(_.split(" ")).
map(x => (x, 1)).
reduceByKey(_+_).
saveAsTextFile("hdfs://qujianlei:9000/output/spark/0214")
sc.stop()
}
}
二、创建 SQLContext 对象
1. 通过 new SQLContext 对象的方式
package sql
import org.apache.log4j.Level
import org.apache.log4j.Logger
import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkContext
case class People(id:Int, name:String, age:Int)
object Demo {
def main(args: Array[String]): Unit = {
// Spark使用log4j打印日志,为了避免程序执行过程中产生过多的日志,添加如下两行代码
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
// new SQLContext的方式创建SQLContext
val conf = new SparkConf().setAppName("demo").setMaster("local")
val sc = new SparkContext(conf)
val sqlc = new SQLContext(sc)
// 导入SQLContext的隐式转换函数toDF
import sqlc.implicits._
val peopleRDD = sc.textFile("d:/students.txt").
map(_.split(" ")).
map(x => People(x(0).toInt, x(1), x(2).toInt))
// 将RDD转换成DataFrame
val peopleDF = peopleRDD.toDF
// 将DataFrame注册成表
peopleDF.createOrReplaceTempView("people")
// 通过SQLContext执行查询
sqlc.sql("select * from people").show()
sc.stop()
}
}
2. 通过 Spark2.0 引入的 SparkSession 间接访问 SQLContext,SparkContext
package sql
import org.apache.log4j.Level
import org.apache.log4j.Logger
import org.apache.spark.SparkConf
import org.apache.spark.sql.SQLContext
import org.apache.spark.SparkContext
import org.apache.spark.sql.SparkSession
case class People(id:Int, name:String, age:Int)
object Demo {
def main(args: Array[String]): Unit = {
// Spark使用log4j打印日志,为了避免程序执行过程中产生过多的日志,添加如下两行代码
Logger.getLogger("org.apache.spark").setLevel(Level.ERROR)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
// 通过sparkSession来间接访问SQLContext
val spark = SparkSession.builder().appName("demo").master("local").getOrCreate()
// 导入SQLContext的隐式转换函数toDF
import spark.sqlContext.implicits._
// 下面这种导入方式也可以
// import spark.implicits
val peopleRDD = spark.sparkContext.textFile("d:/students.txt").
map(_.split(" ")).
map(x => People(x(0).toInt, x(1), x(2).toInt))
// 将RDD转换成DataFrame
val peopleDF = peopleRDD.toDF
// 将DataFrame注册成表
peopleDF.createOrReplaceTempView("people")
// 通过SQLContext执行查询
spark.sqlContext.sql("select * from people").show()
// 下面这种方式也可以
// spark.sql("select * from people").show()
spark.stop()
}
}
三、创建 StreamingContext 对象
package streaming
import org.apache.log4j.Level
import org.apache.log4j.Logger
import org.apache.spark.SparkConf
import org.apache.spark.streaming.StreamingContext
import org.apache.spark.streaming.Seconds
import org.apache.spark.storage.StorageLevel
object SocketStream {
def main(args: Array[String]): Unit = {
System.setProperty("hadoop.home.dir", "F:\\第七期\\hadoop-2.7.3\\hadoop-2.7.3");
// 为了避免执行过程中打印过多的日志
Logger.getLogger("org.apache.spark").setLevel(Level.OFF)
Logger.getLogger("org.eclipse.jetty.server").setLevel(Level.OFF)
// local[x]这里,x的值至少为2,表示有两个线程执行流计算,一个接受数据,一个处理数据
// 如果将程序提交到Spark集群上运行,同理,至少保证CPU有2个核心
val conf = new SparkConf().setAppName("demo").setMaster("local[2]")
val ssc = new StreamingContext(conf, Seconds(3))
val socketStream = ssc.socketTextStream("192.168.0.1", 1234, StorageLevel.MEMORY_AND_DISK_SER)
socketStream.print()
ssc.start()
ssc.awaitTermination()
}
}
启动程序,在 Linux 上启动 netcat:nc -l -p 1234,发送数据:
spark学习常用的操作的更多相关文章
- 【spark】常用转换操作:reduceByKey和groupByKey
1.reduceByKey(func) 功能: 使用 func 函数合并具有相同键的值. 示例: val list = List("hadoop","spark" ...
- 【spark】常用转换操作:join
join就表示内连接. 对于内链接,对于给定的两个输入数据集(k,v1)和(k,v2) 根据相同的k进行连接,最终得到(k,(v1,v2))的数据集. 示例 val arr1 = Array((&qu ...
- 【spark】常用转换操作:keys 、values和mapValues
1.keys 功能: 返回所有键值对的key 示例 val list = List("hadoop","spark","hive",&quo ...
- 【spark】常用转换操作:sortByKey()和sortBy()
1.sortByKey() 功能: 返回一个根据键排序的RDD 示例 val list = List(("a",3),("b",2),("c" ...
- Spark学习之键值对操作总结
键值对 RDD 是 Spark 中许多操作所需要的常见数据类型.键值对 RDD 通常用来进行聚合计算.我们一般要先通过一些初始 ETL(抽取.转化.装载)操作来将数据转化为键值对形式.键值对 RDD ...
- Spark学习之键值对(pair RDD)操作(3)
Spark学习之键值对(pair RDD)操作(3) 1. 我们通常从一个RDD中提取某些字段(如代表事件时间.用户ID或者其他标识符的字段),并使用这些字段为pair RDD操作中的键. 2. 创建 ...
- jackson学习之三:常用API操作
欢迎访问我的GitHub https://github.com/zq2599/blog_demos 内容:所有原创文章分类汇总及配套源码,涉及Java.Docker.Kubernetes.DevOPS ...
- 在spark中操作mysql数据 ---- spark学习之七
使用spark的 DataFrame 来操作mysql数据. DataFrame是比RDD更高一个级别的抽象,可以应用SQL语句进行操作,详细参考: https://spark.apache.org/ ...
- Spark学习笔记之RDD中的Transformation和Action函数
总算可以开始写第一篇技术博客了,就从学习Spark开始吧.之前阅读了很多关于Spark的文章,对Spark的工作机制及编程模型有了一定了解,下面把Spark中对RDD的常用操作函数做一下总结,以pys ...
随机推荐
- Java多线程编程核心(1)
Java多线程编程核心(1) 停止线程 本节主要讨论如何更好停止一个线程.停止线程意味着在线程处理完成任务之前放弃当前操作. 1.停不了的线程 可能大多数同学会使用interrupt()来停止线程,但 ...
- C语言运算符_03
·运算符的优先级:C语言中,运算符的优先级共分为15级.1级最高,15级最低.在表达式中,优先级较高的先于优先级较低的进行运算.而在同一个运算量两侧的运算符优先级相同时,则按运算符的结合性所规定的结合 ...
- swift-通知的基本使用
swift-通知的基本使用 //通知的使用 1.发通知.(以这条通知为例,通知名字:nickNameNotification 通知参数:title) NSNotificationCenter.de ...
- python virtualenv学习
补充:在开发Python应用程序的时候,系统安装的Python3只有一个版本:3.4.所有第三方的包都会被pip安装到Python3的site-packages目录下. virtualenv就是 ...
- Codeforces Round #510 #A
http://codeforces.com/contest/1042/problem/A 题目大意就是: 现在公园里有n个长椅(要多长有多长),第i个长椅上有a[i]个人(泰山崩于前而不乱),现在又有 ...
- Bzoj 1085: [SCOI2005]骑士精神 (dfs)
Bzoj 1085: [SCOI2005]骑士精神 题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=1085 dfs + 剪枝. 剪枝方法: ...
- java.sql.date 插入数据库没有时分秒
java.sql.date 插入数据库没有时分秒 把java中实体类的sql.date类型改成java.sql.Timestamp类型即可 util.date 转 Timestamp: java.sq ...
- Python_编程题集_001_词法解析
1.词法解析: 我的是名字是ths,今年18岁 语法分析后得到结果如下: 数字:18 中文:我的名字是 今年 岁 拼音:ths 符号:,. 请编写程序实现该词法分析功能 string模块解: impo ...
- PAT Basic 1029
1029 旧键盘 旧键盘上坏了几个键,于是在敲一段文字的时候,对应的字符就不会出现.现在给出应该输入的一段文字.以及实际被输入的文字,请你列出肯定坏掉的那些键. 输入格式: 输入在2行中分别给出应该输 ...
- 使用Lucene的api将索引创建到索引库中
import org.apache.commons.io.FileUtils; import org.apache.lucene.document.Document; import org.apach ...