Spark Examples

Spark Examples

这些例子提供了Spark API的快速概览。Spark API建立在分布数据集的理念上,包含Java或Python对象。从外部数据创建数据集,然后对它应用并行操作。有两种操作类型:transformations-从上一个数据集定义一个新数据集;actions-在集群中开始一个Job。

在log文件中查询所有error信息:

val file = spark.textFile("hdfs://...")
val errors = file.filter(line => line.contains("ERROR"))
// Count all the errors
errors.count()
// Count errors mentioning MySQL
errors.filter(line => line.contains("MySQL")).count()
// Fetch the MySQL errors as an array of strings
errors.filter(line => line.contains("MySQL")).collect()

filtertransformations操作;countcollectactions操作。

Spark可以cache数据集到内存,提升复用的速度。下面的例子,把error信息加载到RAM使用:

errors.cache()

第一个使用errors的action执行后,之后对errors的action都会非常快。

Word Count

这个例子,我们使用一些transformations 建立一个(String, Int)对的数据集,调用counts,然后保存到文件。

val file = spark.textFile("hdfs://...")
val counts = file.flatMap(line => line.split(" "))
                 .map(word => (word, 1))
                 .reduceByKey(_ + _)
counts.saveAsTextFile("hdfs://...") 

Estimating Pi

Spark也可以应用在计算密集型任务。这段代码通过”throwing darts”在循环中估算π。选择随机点在单位正方形((0,0) to (1,1))中,然后看有多少在单位圆粒。分数部分应该是π / 4,所以我们可以使用这种方式获得估算。

val count = spark.parallelize(1 to NUM_SAMPLES).map{i =>
  val x = Math.random()
  val y = Math.random()
  if (x*x + y*y < 1) 1 else 0
}.reduce(_ + _)
println("Pi is roughly " + 4.0 * count / NUM_SAMPLES)

Logistic Regression(逻辑回归)

这是一个迭代的机器学习算法-探索怎样查找最好的超平面-分隔多维特征空间中2组点。例如,它被应用在分类垃圾邮件。因为这个算法在同一个数据集应用相同的MapReduce操作,更适合缓存输出到内存。

val points = spark.textFile(...).map(parsePoint).cache()
var w = Vector.random(D) // current separating plane
for (i <- 1 to ITERATIONS) {
  val gradient = points.map(p =>
    (1 / (1 + exp(-p.y*(w dot p.x))) - 1) * p.y * p.x
  ).reduce(_ + _)
  w -= gradient
}
println("Final separating plane: " + w)

注意当前分隔平面,w,每个map调用自动装填到集群中。
下面图表比较了Spark和Hadoop程序,在100个节点集群中的100GB数据,迭代的平均运行时间。表现了内存缓存的好处:
这里写图片描述

Additional Examples

更多的分布式Spark附加实例:

  • Basic Spark: Scala examples, Java examples, Python examples

  • Spark Streaming: Scala examples, Java examples

你可能感兴趣的:(Spark,Spark)