Spark学习(一):Spark独立应用

Spark是一个用来实现快速而通用的集群计算的平台。包括Spark Sql ,Spark Steaming ,MLlib,GraphX,集群管理器等等。

每个Spark应用都有一个驱动器程序来发起集群上的各种并行操作,同时,通过SparkContext对象来访问Spark.

创建一个独立的Spark应用,首先初始化SparkContext 如下:(java版本)

SparkConf conf = new Sparkconf().setMaster("local").setAppName("My App");
JavaSparkContext sc = new JavaSparkContext(conf);

setMaster() :设置集群URL local 表面运行在单机单线程上而无需连接的集群

setAppName() : 应用名称,可以帮助在集群管理器的用户界面中找到

Spark中对数据的核心抽象是弹性分布式数据集(RDD) ,我们需要处理的数据都是被抽象为RDD,并在RDD提供的操作下对数据进行处理。

RDD的创建方式有两种:1.读取一个外部数据集   

                                        2.在驱动器程序里分发驱动器程序中的对象集合

例如:将一个文件->RDD(python):

lines = sc.textFile("README.md")

这里sc 是SparkContext 的实例对象

第二种方法方法名字有点长,实际上个人感觉就是将编程语言中的数据结构转换为RDD

JavaRDD lines = sc.parallelize(Arrays.asList("pandas","i like pandas"))

RDD的操作也分为两类

1.转化操作:返回新的RDD的操作

例如: 将日志文件中error 级别信息全部提取出来

imputRDD = sc.textFile("log.txt")
errorsRDD = inputRDD.filter(lambda x: "error" in x)

这样errorsRDD存储了包含"error"的所有日志信息

2.行动操作 : 将最终结果放回给驱动程序或者写入外部设备

对于前面errorsRDD 输出日志条数(.count()),输出日志信息(.take):

print "Input had" + errorsRDD.count()+ "concerning lines"
print "Here are 10 examples"
for line in errorsRDD.tale(10):
    print line

RDD 有一个特征就是 惰性求值,简单来讲就是RDD对转化操作不会立即执行,Spark会记录执行的操作信息,在调用行动操作后才会运行,这样有利于节省开销。

同时可以通过自己定义的函数,指定生成新的RDD的规则

例如:

RDD errors = lines.filter(new Function() {
    public Boolean call(String x) {return x.contains("error"):}
});

也可以使用具名类进行函数传递 

class ContainsError implements Function {
    public Boolean call(String x) { return x.contains("error"):}
}

RDD errors = lines.filter(new ContainsError());

同时需要注意在使用函数传递时尽量将函数中的使用到的变量全部写成局部变量,不然会将变量作用的整个范围全部提交到Spark进行计算。

你可能感兴趣的:(Spark)