Spark SQL编程

1、Spark SQL基本操作

(一)创建DataFrame

(二)查询所有数据

 

(三)查询所有数据并去除重复的数据

 

(四)查询所有数据打印时去除id字段

 

(五)筛选出age>30的记录

 

(六)将数据按age分组

 

(七)将数据按name升序排序 

(八)取出前3行数据

 

(九)查询所有记录的name列,并为其取别名为username

 

(十)查询年龄age的平均值

 

(十一)查询年龄age的最小值 

2、编程实现将RDD转换为DataFrame

(一) 代码编写

import org.apache.spark.sql.types._
import org.apache.spark.sql.Row

val peopleRDD = spark.sparkContext.textFile("file:///root/wyqWork/Demo6/employee.txt")

val schemaString = "id name age"

val fields = schemaString.split(" ").map(fieldName => StructField(fieldName, StringType, nullable = true))

val schema = StructType(fields)

val rowRDD = peopleRDD.map(_.split(",")).map(attributes => Row(attributes(0), attributes(1).trim, attributes(2).trim))

val peopleDF = spark.createDataFrame(rowRDD, schema)

peopleDF.createOrReplaceTempView("people")

val results = spark.sql("SELECT id,name,age FROM people")

results.map(attributes => "id: " + attributes(0)+","+"name:"+attributes(1)+","+"age:"+attributes(2)).show()

 (二)结果输出

3、利用DataFrame读写MySQL的数据

(一)新建数据库sparktest,再创建表employee,并输入数据

 

 

(二)查询当前表中所有数据

 

4、配置Sp a r k通过JDBC连接数据库MySQL,编程实现利用Da t aFr a m e插入如表6 -2所示的两行数据到MySQL中,最后打印出a g e的最大值和a g e的总和。

(一)代码编写

import java.util.Properties
import org.apache.spark.sql.types._
import org.apache.spark.sql.Row
import org.apache.spark.sql.SparkSession
val spark=SparkSession.builder().appName("TestMySQL").master("local").getOrCreate()
import  spark.implicits._
val employeeRDD=spark.sparkContext.parallelize(Array("3 Mary F 26","4 Tom M 23")).map(_.split(" "))
val schema=StructType(List(StructField("id",IntegerType,
      true),StructField("name",StringType,true),StructField("gender",StringType,true),
      StructField("age",IntegerType,true)))
val rowRDD=employeeRDD.map(p=>Row(p(0).toInt,p(1).trim,p(2).trim,p(3).toInt))
val employeeDF=spark.createDataFrame(rowRDD,schema)
val prop=new Properties()
prop.put("user","root")
prop.put("password","10086CYc#")
prop.put("driver","com.mysql.cj.jdbc.Driver")
employeeDF.write.mode("append").jdbc("jdbc:mysql://localhost:3306/sparktest","sparktest.employee",prop)
val jdbcDF = spark.read.format("jdbc").
option("url","jdbc:mysql://localhost:3306/sparktest").
option("driver","com.mysql.cj.jdbc.Driver").
option("dbtable", "employee").
option("user", "root").
option("password", "10086CYc#").
load()
jdbcDF.agg("age" -> "max", "age" -> "sum").show()

 

 (二)结果输出

 

  • 3
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ricardo0324

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值