需要源码和依赖请点赞关注收藏后评论区留言私信~~~
一、Dataframe操作
步骤如下
1)利用IntelliJ IDEA新建一个maven工程,界面如下
2)修改pom.XML添加相关依赖包
3)在工程名处点右键,选择Open Module Settings
4)配置Scala Sdk,界面如下
5)新建文件夹scala,界面如下:
6) 将文件夹scala设置成Source Root,界面如下:
7) 新建scala类,界面如下:
此类主要功能是读取D盘下的people.txt文件,使用编程方式操作DataFrame,相关代码如下
import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SparkSession} case class Person(name:String,age:Long) object sparkSqlSchema { def main(args: Array[String]): Unit = { //创建Spark运行环境 val spark = SparkSession.builder().appName("sparkSqlSchema").master("local").getOrCreate() val sc = spark.sparkContext; //读取文件 val data: RDD[Array[String]] = sc.textFile("D:/people.txt"). map (x => x.split(",")); //将RDD与样例类关联 val personRdd: RDD[Person] = data. map (x => Person(x(0),x(1).toLong)) //手动导入隐式转换 import spark.implicits._ val personDF: DataFrame = personRdd.toDF //显示DataFrame的数据 personDF.show() //显示DataFrame的schema信息 personDF.printSchema() //显示DataFrame记录数 println(personDF.count()) //显示DataFrame的所有字段 personDF.columns.foreach(println) //取出DataFrame的第一行记录 println(personDF.head()) //显示DataFrame中name字段的所有值 personDF.select("name").show() //过滤出DataFrame中年龄大于20的记录 personDF.filter($"age" > 20).show() //统计DataFrame中年龄大于20的人数 println(personDF.filter($"age" > 20).count()) //统计DataFrame中按照年龄进行分组,求每个组的人数 personDF.groupBy("age").count().show() //将DataFrame注册成临时表 personDF.createOrReplaceTempView("t_person") //传入sql语句,进行操作 spark.sql("select * from t_person").show() spark.sql("select * from t_person where name='王五'").show() spark.sql("select * from t_person order by age desc").show() //DataFrame转换成Dataset var ds=personDF.as[Person] ds.show() //关闭操作 sc.stop() spark.stop() } }
二、Spark SQL读写MySQL数据库
下面的代码使用JDBC连接MySQL数据库,并进行读写操作 主要步骤如下
1:新建数据库
2:新建表
3:添加依赖包
4:新建类
5:查看运行结果
代码如下
import java.util.Properties import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame, SaveMode,SparkSession} object sparkSqlMysql { def main(args: Array[String]): Unit = { //创建sparkSession对象 val spark: SparkSession = SparkSession.builder() .appName("sparkSqlMysql") .master("local") .getOrCreate() val sc = spark.sparkContext //读取数据 val data: RDD[Array[String]] = sc.textFile("D:/people.txt").map(x => x.split(",")); //RDD关联Person val personRdd: RDD[Person] = data.map(x => Person(x(0), x(1).toLong)) //导入隐式转换 import spark.implicits._ //将RDD转换成DataFrame val personDF: DataFrame = personRdd.toDF() personDF.show() //创建Properties对象,配置连接mysql的用户名和密码 val prop =new Properties() prop.setProperty("user","root") prop.setProperty("password","123456") //将personDF写入MySQL personDF.write.mode(SaveMode.Append).jdbc("jdbc:mysql://127.0.0.1:3306/spark?useUnicode=true&characterEncoding=utf8","person",prop) //从数据库里读取数据 val mysqlDF: DataFrame = spark.read.jdbc("jdbc:mysql://127.0.0.1:3306/spark", "person", prop) mysqlDF.show() spark.stop() } }
三、Spark SQL读写Hive
下面的示例程序连接Hive,并读写Hive下的表 主要步骤如下
1:在pom.xml中添加Hive依赖包
2:连接Hive
3:新建表
4:向Hive表写入数据,新scala类sparksqlToHIVE,主要功能是读取D盘下的people.txt文件,使用编程方式操作DataFrame,然后插入到HIVE的表中。
5:查看运行结果
代码如下
import org.apache.spark.rdd.RDD import org.apache.spark.sql.{DataFrame,SparkSession} object sparksqlToHIVE { def main(args: Array[String]): Unit = { //设置访问用户名,主要用于访问HDFS下的Hive warehouse目录 System.setProperty("HADOOP_USER_NAME", "root") //创建sparkSession val spark: SparkSession = SparkSession.builder() .appName("sparksqlToHIVE") .config("executor-cores",1) .master("local") .enableHiveSupport() //开启支持Hive .getOrCreate() val sc = spark.sparkContext //读取文件 val data: RDD[Array[String]] = sc.textFile("D:/people.txt"). map (x => x.split(",")); //将RDD与样例类关联 val personRdd: RDD[Person] = data. map (x => Person(x(0),x(1).toLong)) //手动导入隐式转换 import spark.implicits._ val personDF: DataFrame = personRdd.toDF //显示DataFrame的数据 personDF.show() //将DataFrame注册成临时表t_person personDF.createOrReplaceTempView("t_person") //显示临时表t_person的数据 spark.sql("select * from t_person").show() //使用Hive中bigdata的数据库 spark.sql("use bigdata") //将临时表t_person的数据插入使用Hive中bigdata数据库下的person表中 spark.sql("insert into person select * from t_person") //显示用Hive中bigdata数据库下的person表数据 spark.sql("select * from person").show() spark.stop() } }
创作不易 觉得有帮助请点赞关注收藏~~~