一.RDD
1.RDD简介:
Resilient Distributed Dataset—有弹性的分布式的数据集合;里面没有真正的数据,是一个抽象的、不可变得、被分区的集合,集合内的元素可以被并行的操作
2.RDD特点:
-
有多个分区,分区数量决定任务并行数
-
函数作用在分区的迭代器中,决定了计算逻辑
-
众RDD之间存在依赖关系,可以根据依赖关系恢复失败的任务和划分stage
-
如果要发生shuffle,要使用分区器,默认使用HashPartitioner
-
最优位置,即将Executor调度到数据所在的节点上,要求Worker和DataNode部署在同一节点
3.RDD的创建:
a、通过并行集合创建RDD
-
parallelize():
-
val rdd = sc.parallelize(Array(100, 300, 200, 600, 500, 900))
-
val rdd = sc.parallelize(List(1, 2, 3, 4, 5, 6, 7, 8))
-
makeRDD():
-
val rdd = sc.makeRDD(List(1, 2, 3, 4, 5, 6, 7, 8))
-
rdd.collect()
,
b、从外部存储创建RDD
-
val rdd = sc.textFile("file:///home/test.txt")
-
val lines = rdd.collect
-
lines.foreach(println)
-
for (line <- lines) println(line)
c.从HDFS中加载数据创建RDD
-
val rdd = sc.textFile("hdfs://192.168.219.75:9000/park/test.txt")
-
val lines = rdd.collect
-
val sparkLines = rdd.filter(_.contains("spark"))
二.DataFrame的创建用法及实例
1. 创建DataFrame:
val hyd= spark.createDataFrame(Seq(
(1, "zs"),
(2, "ls"),
(3, "ww")
)).toDF("id", "name")
2. 显示DataFrame的结构:
hyd.printSchema()
3.显示DataFrame的内容:
hyd.show()
4.读文件:
import spark.implicits._
val movies = spark.read.text("/spark/movies.dat")
5.selectExpr():对指定字段进行特殊处理
spark.udf.register("replace",(x:String) => {
x match{
case "M" => 0
case "F" => 1
}
})
val userSelectExpr = user.selectExpr(
"userId","replace(gender) as sex","age")
userSelectExpr.show(3)