Spark Shell

Spark-Shell是一个Spark Application,运行时需要向资源管理器申请资源,如Standalone Spark、YARN、Mesos。本例向Standalone Spark申请资源,所以在运行spark-shell时需要指向申请资源的Standalone Spark集群信息,其参数为MASTER。

启动spark-shell:

./bin/spark-shell --master spark://MASTER:PORT

如果未在spark-env.sh中申明MASTER,则使用命令MASTER=spark://bdp125:7077 bin/spark-shell启动;

如果已经在spark-env.sh中申明MASTER,则可以直接用bin/spark-shell启动。

集群模式:

MASTER=spark://`hostname`:7077 bin/spark-shell

bin/spark-shell --master spark://es122:7077

单机模式:

bin/spark-shell local[4]

加载一个text文件

Spark context available as sc.

连接到Spark的master之后,若集群中没有分布式文件系统,Spark会在集群中每一台机器上加载数据,所以要确保集群中的每个节点上都有完整数据。

spam.data

单机时:

var inFile = sc.textFile("./spam.data")

集群时:

import org.apache.spark.SparkFiles;
var file = sc.addFile("spam.data")
var inFile = sc.textFile(SparkFiles.get("spam.data"))

处理

文件的一行,按空格拆分,然后转成double。

var nums = inFile.map(x => x.split(" ").map(_.toDouble))

注:x => x.toDouble 等价于_.toDouble

查看:

inFile.first()
nums.first()

逻辑回归:

import org.apache.spark.util.Vector
case class DataPoint(x: Vector, y: Double)
def parsePoint(x: Array[Double]): DataPoint = {
    DataPoint(new Vector(x.slice(0, x.size-2 )), x(x.size -1 ))
}