一、實驗目的
(1)通過實驗掌握 Spark SQL 的基本編程方法;
(2)熟悉 RDD 到 DataFrame 的轉化方法;
(3)熟悉利用 Spark SQL 管理來自不同數據源的數據。
二、實驗平台
操作系統: centos6.4 Spark 版本:1.5.0 數據庫:MySQL
三、實驗內容
實驗一
1.Spark SQL 基本操作
將下列 JSON 格式數據復制到 Linux 系統中,並保存命名為 employee.json。
為 employee.json 創建 DataFrame,並寫出 Scala 語句完成下列操作:
進入spark-shell中,輸入以下命令:
val sqlcontext = new org.apache.spark.sql.SQLContext(sc) val df = sqlcontext.read.json("file:///usr/local/sparkdata/employee.json")
接着完成實驗:
(1) 查詢所有數據;
df.show()
(2) 查詢所有數據,並去除重復的數據;
df.distinct().show()
(3) 查詢所有數據,打印時去除 id 字段;
df.drop("id").show()
(4) 篩選出 age>30 的記錄;
df.filter(df("age")>30).show()
(5) 將數據按 age 分組;
df.sort(df("age").asc).show()
(6) 將數據按 name 升序排列;
df.sort(df("name").asc).show()
(7) 取出前 3 行數據;
df.take(3)或df.head(3)
(8) 查詢所有記錄的 name 列,並為其取別名為 username;
df.select(df("name").as("username")).show()
(9) 查詢年齡 age 的平均值;
df.agg("age"->"avg").show()
(10) 查詢年齡 age 的最小值。
df.agg("age"->"min").show()
實驗二
2.編程實現將 RDD 轉換為 DataFrame
源文件內容如下(包含 id,name,age):
請將數據復制保存到 Linux 系統中,命名為 employee.txt,實現從 RDD 轉換得到 DataFrame,並按“id:1,name:Ella,age:36”的格式打印出 DataFrame 的所有數據。請寫出程序代 碼。
實驗三
3. 編程實現利用 DataFrame 讀寫 MySQL 的數據
(1)在 MySQL 數據庫中新建數據庫 sparktest,再創建表 employee,包含如表 6-2 所示的 兩行數據。
(2)配置 Spark 通過 JDBC 連接數據庫 MySQL,編程實現利用 DataFrame 插入如表 6-3 所 示的兩行數據到 MySQL 中,最后打印出 age 的最大值和 age 的總和。