spark2.2官方教程笔记-快速开始
博客专区 > skanda 的博客 > 博客详情
spark2.2官方教程笔记-快速开始
skanda 发表于9个月前
spark2.2官方教程笔记-快速开始
  • 发表于 9个月前
  • 阅读 17
  • 收藏 0
  • 点赞 0
  • 评论 0

【腾讯云】新注册用户域名抢购1元起>>>   

摘要: 本文章系列是对阅读spark官方教程过程留下的笔记。

spark官方教程包括以下几个模块

  1. 快速开始
  2. spark编程指南
  3. spark内建模块:a,spark流式编程;b,sparkSql,DataSets和DataFrames;c:MLlib内建机器学习库;d:图处理
  4. spark集群部署向导;
  5. 其它文档包括配置spark系统,监控,作业调度,安全支持等

快速开始:

    spark主要使用的分布式抽象集合工具是Dataset。Dataset创建方式有从Haddop InputForamtes创建,或者从其他DataSet转换而来。

Hadoop InputFormats方式:

scala> val textFile = spark.read.textFile("README.md")
textFile: org.apache.spark.sql.Dataset[String] = [value: string]

    对于DataSet,我们可以直接获取数据,比如调用action方法,或者通过transform方法转换成一个新的数值;

action操作

scala> textFile.count() // Number of items in this Dataset
res0: Long = 126 // May be different from yours as README.md will change over time, similar to other outputs

scala> textFile.first() // First item in this Dataset
res1: String = # Apache Spark

tranform操作

scala> val linesWithSpark = textFile.filter(line => line.contains("Spark"))
linesWithSpark: org.apache.spark.sql.Dataset[String] = [value: string]

transform+action操作

scala> textFile.filter(line => line.contains("Spark")).count() // How many lines contain "Spark"?
res3: Long = 15

更多数据集操作

  Dataset action和transformations能被适用于更多更复杂的操作。比如获取一个文件中最多单词的行 所包含的单词数目

scala> textFile.map(line => line.split(" ").size).reduce((a, b) => if (a > b) a else b)
res4: Long = 15

先用一个map,把每行的单词数统计出来。再用一个reduce,把 最多单词的行 所包含的单词数目返回回去。对于reduce中的操作,我们可以使用数学库中的max函数代替

scala> import java.lang.Math
import java.lang.Math

scala> textFile.map(line => line.split(" ").size).reduce((a, b) => Math.max(a, b))
res5: Int = 15

Caching

spark支持把数据集推送得到集群范围的内存中。在数据经常需要访问的时候这个函数时很有用。

spark应用例子

/* SimpleApp.scala */
import org.apache.spark.sql.SparkSession

object SimpleApp {
  def main(args: Array[String]) {
    val logFile = "YOUR_SPARK_HOME/README.md" // Should be some file on your system
    val spark = SparkSession.builder.appName("Simple Application").getOrCreate()
    val logData = spark.read.textFile(logFile).cache()
    val numAs = logData.filter(line => line.contains("a")).count()
    val numBs = logData.filter(line => line.contains("b")).count()
    println(s"Lines with a: $numAs, Lines with b: $numBs")
    spark.stop()
  }
}

程序很简单,只是对spark的readme文件,获取包含字母a的行数和字母b的行数。

标签: Spark Framework
  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 8
博文 75
码字总数 50007
×
skanda
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: