六.SparkSQL之DataFrame操作实例实战API

前面已经说过DataFrame的基本API操作,接下来就讲下实际开发过程中的应用,首先需要准备一个数据源文件,以下面这种格式的数据(这种数据是可以清洗日志得到的)
六.SparkSQL之DataFrame操作实例实战API_第1张图片

第一步: 实例实战演示

import org.apache.spark.sql.SparkSession
object DataFrameCase {

def main(args: Array[String]){

val spark = SparkSession.builder().master("local[2]").appName("DataFrameCase").getOrCreate()

val rdd =spark.sparkContext.textFile("student.data")

//导入隐式转换函数
import spark.implicits._
//转换成DataFrame  要加上转义字符 \\ ,因为有一些特殊字符没有转义字符的话不识别
val student = rdd.map(_.split("\\|")).map(line => Student(line(0).toInt,line(1),line(2),line(3))).toDF()
//student2为了测试join方法
val student2 = rdd.map(_.split("\\|")).map(line => Student(line(0).toInt,line(1),line(2),line(3))).toDF()

student.show()
六.SparkSQL之DataFrame操作实例实战API_第2张图片

//使用show方法,默认显示的是前20条,如果想看到更多需要在方法中加入Int类型的参数,
//同时,该方法在展示数据的时候有截取的功能,长度过长会显示…
//因此,想要显示全部的话需要加上一个false参数,因为默认的是true就是截取
student.show(30,false)
六.SparkSQL之DataFrame操作实例实战API_第3张图片

//显示数据的前10行数据
student.take(10)
//显示第一条数据 等同于 student.head(3)(显示前三条数据)
student.first()
//过滤掉名字为空的数据
student.filter("name !='' OR name != 'NULL' " ).show

六.SparkSQL之DataFrame操作实例实战API_第4张图片

//找出名字以l开头的人
student.filter(“SUBSTR(name,0,1)=‘l’”).show()
在这里插入图片描述

//查询所有的内置函数
spark.sql(“show functions”).show(1000)
六.SparkSQL之DataFrame操作实例实战API_第5张图片

//按照名字排序操作
student.sort(student.col("name"))
//按照名字降序进行排列
student.sort(student.col("name").desc)

//队列进行重新命名
student.select(student(“name”).as(“student_name”)).show()
六.SparkSQL之DataFrame操作实例实战API_第6张图片
//join操作
student.join(student2,student.col(“id”) === student2.col(“id”)).show()
六.SparkSQL之DataFrame操作实例实战API_第7张图片
spark.stop()
}
case class Student(id: Int,name: String, phone: String, email: String )
}

你可能感兴趣的:(Spark,SQL)