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会在集群中每一台机器上加载数据,所以要确保集群中的每个节点上都有完整数据。
单机时:
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 ))
}