RDD(弹性分布式数据集)是Spark的核心抽象。它是一组元素,在集群的节点之间进行分区,以便我们可以对其执行各种并行操作。
1.parallelize
2/makeRDD
3.textFile
4.saveAsTextFile
def makeRDD[T: ClassTag](
seq: Seq[T],
numSlices: Int = defaultParallelism): RDD[T] = withScope {
parallelize(seq, numSlices)
}
object Spark_RDD01 {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local").setAppName("RDD")
val sc = new SparkContext(sparkConf)
val rdd1 = sc.parallelize(Seq(1, 2, 3, 4))
// makeRDD 底层用的是parallelize()
val rdd = sc.makeRDD(List(1, 2, 3, 4))
rdd.collect().foreach(println)
sc.stop()
}
}
object Spark_RDD02 {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local").setAppName("RDD")
val sc = new SparkContext(sparkConf)
val rdd = sc.textFile("E:\\atguiguDemo03\\leet-code\\spark01\\src\\main\\resources\\1.txt")
rdd.collect().foreach(println)
sc.stop()
}
}
这里用的是绝对路径,如果是相对路径的话是针对当前项目的
如果是内存数据保存的话,则如果有分区的参数则按照分区的参数分区,如果没有的话按照setMaster和2的最小值当作分区的数量。
object Spark_RDD03 {
def main(args: Array[String]): Unit = {
// 并行度 分区
val sparkConf = new SparkConf().setMaster("local[*]").setAppName("RDD")
val sc = new SparkContext(sparkConf)
val rdd = sc.makeRDD(List(1, 2, 3, 4))
// 分区保存,默认为local[*]:cpu数
rdd.saveAsTextFile("1")
sc.stop()
}
}
如果是文件和saveAsTextFile,还要看当前文件所占的字节数和分区数相除
比如如果是7个字节的话,如果是2个分区的话,那么7/2=3每个分区里为3个字节
那么有7/3个分区≈3个分区
object Spark_RDD04 {
def main(args: Array[String]): Unit = {
val sparkConf = new SparkConf().setMaster("local").setAppName("RDD")
val sc = new SparkContext(sparkConf)
// 不传参的话为min(local, 2)
// 传参的话,读取方式就是Hadoop的读取方式
// 计算方式:
val rdd = sc.textFile("")
rdd.saveAsTextFile("1")
sc.stop()
}
}