Spark SQL概念学习系列之如何使用 Spark SQL(六)

时间:2021-08-22 07:34:25

  val sqlContext = new org.apache.spark.sql.SQLContext(sc)
  // 在这里引入 sqlContext 下所有的方法就可以直接用 sql 方法进行查询
  import sqlContext._
  case class Person(name: String, age: Int)

  // 下面的 people 是含有 case 类型数据的 RDD,会默认由 Scala 的 implicit 机制将 RDD 转换为
  SchemaRDD, SchemaRDD 是 SparkSQL 中的核心 RDD
  val people = sc.textFile("examples/src/main/resources/people.txt").map(_.
  split(",")).map(p => Person(p(0), p(1).trim.toInt))
  // 在内存的元数据中注册表信息,这样一个 Spark SQL 表就创建完成了
  people.registerAsTable("people")
  // sql 语句就会触发上面分析的 Spark SQL 的执行过程,读者可以参考上面的图示
  val teenagers = sql("SELECT name FROM people WHERE age >= 13 AND age <= 19")
  // 最后生成 teenagers 也是一个 RDD
  teenagers.map(t =>"Name: " + t(0)).collect().foreach(println)

  通过之前的介绍,读者对支撑结构化数据分析任务的 Spark SQL 的原理与使用有了一定的了解。在生产环境中,有一类数据分析任务对响应延迟要求高,需要实时处理流数据,在 BDAS 中, Spark Streaming 用于支撑大规模流式处理分析任务。