最近迷上了spark,寫一些博客,記錄一下自己的所得。
先學一下spark document上的樣例。
代碼:
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
case class Person(name: String, age: Long)
val people = sc.textFile("examples/src/main/resources/people.txt").map(_.split(",")).map(p => Person(p(0), p(1).trim.toInt)).toDF()
people.registerTempTable("people")
val teenagers = sqlContext.sql("SELECT name, age FROM people WHERE age >= 13 AND age <= 19")
teenagers.collect().foreach(println)
逐行解釋一下:
第一行:根據已有的SparkContext創建一個SQLContext。
第二行:創建一個case class
第三行:將txt文件讀入到RDD,每行數據按照','分割,然后將每行數據轉成Person,然后將RDD轉成DataFrame。
第四行:用sqlContext執行sql查詢。將結果記錄成一個RDD:teenagers
第五行:將每行數據進行打印輸出。注意打印之前要先collect()。因為RDD的數據集是在整個集群上的,要想逐行打印,要先collect到driver端。然后通過foreach輸出。
完。