本文共 1477 字,大约阅读时间需要 4 分钟。
在Spark编程中,Driver程序是所有操作的起点,它负责管理集群中的节点(称为executors),并通过SparkContext与集群进行交互。理解Driver程序与SparkContext的关系,以及Resilient Distributed Datasets(RDDs)的核心概念,是 Spark 编程的基础。
SparkContext对象是连接Driver程序与Spark集群的纽带。在Shell环境中,SparkContext会自动创建一个名为sc的对象。通过SparkContext,你可以访问集群中的资源,并执行Spark任务。例如,在以下代码中,sc.textFile("/root/helloSpark.txt")会读取文件并返回一个 RDD(Resilient Distributed Dataset),代表文件内容:
scala> val lines = sc.textFile("/root/helloSpark.txt")lines: org.apache.spark.rdd.RDD[String] = /root/helloSpark.txt MapPartitionsRDD[1] at textFile at ... Resilient Distributed Datasets(RDDs)是Spark的基础抽象类,用于分布式处理和数据操作。每个 RDD由多个分片(partitions)组成,每个分片包含数据的子集。分片是Spark并行处理的基本单元,确保数据在集群的不同节点上高效计算。
通过以下方法可以创建 RDD:
将一个集合传递给 parallelize() 方法,指定分片数:
val rdd = sc.parallelize(Array(1, 2, 2, 4), 4)
读取外部文件并生成 RDD:
val lines = sc.textFile("/root/helloSpark.txt") 在Scala中,变量分为两种:
val:变量不可修改,一旦赋值不能重新指向其他值。var:变量可修改,赋值后可以重新指向类型相同的值。val lines2 = lines.filter(line => line.contains("hello"))lines2: org.apache.spark.rdd.RDD[String] = MapPartitionsRDD[13] at filter at ... Scala支持匿名函数,函数参数和返回类型可以由编译器推断:
lines.filter(line => line.contains("world")) line是 String 类型,contains 方法返回布尔值。val lines2 = lines.filter(line => line.contains("hello"))lines2.collect() // 返回处理后的数据 转载地址:http://tsej.baihongyu.com/