SparkSQL模块中DataFrame常用API操作

学习目标: 

对SparkSQL2.x模块中DataFrame的API操作进行整理。在工作中多个业务场景应用SparkSQL模块完成离线批处理操作,对海量历史数据处理和分析,分析结果数据,供下一步数据应用进行使用。并且在性能上解决了Hive方面的性能短板问题。在此记录下对SparkSQL模块中DataFrame的API常用操作。


学习内容:


1、 掌握DataFrame中常用api操作,包含:①数据源读取与保存。②在DataFrame中ETL操作。

2、流程:①应用spark对象完成声明操作

ps:目的在于对自身的掌握情况完成记录和后期的技术温顾,希望对大家都有帮助

package LogsAnalyse

import org.apache.spark.sql.SparkSession

object DataFrameCase {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder().appName("DataFrame").master("local[2]").getOrCreate()
    val rdd = spark.sparkContext.textFile("C:\\Users\\BaiLing\\Desktop\\small.txt")
    //隐式转换
    import spark.implicits._
    val infoDF = rdd.map(_.split("\\|")).map(line=>Student(line(0).toInt,line(1),line(2),line(3))).toDF()
    infoDF.show(30,false)
    infoDF.select("email","name").show(false)
    // ②infoDF.select(infoDF.col("name"),infoDF.col("email")).show(false)
    // ③infoDF.select(infoDF("name"),infoDF("email")).show(false)

    //①应用filter函数完成对数据过滤操作,
    infoDF.filter("name='' or name=='NULL'").show(30,false)
    //②应用filter函数完成对name以M开头的并且name不为空数据的过滤操作,所呈现结果为满足函数内容的数据
    //name以M开头的并且name不为空的有效数据并且按照指定字段进行排序
    infoDF.filter("SubString(name,0,1)!='M' and name!='' and name!='NULL'").sort("name")

    infoDF.select(infoDF("name").as("student_name")).show(30,false)
    infoDF.select(infoDF.col("name").as("stu_name")).show(false)
    //完成对name字段M开头数据的过滤,并且name过滤数据为空的值,并且对指定字段完成排序工作
    infoDF.filter("SubString(name,0,1)!='M' and name!='' and name!='NULL'").sort(infoDF.col("name").desc,infoDF.col("id")).show(30,false)
    val infoDF_two = rdd.map(_.split("\\|")).map(line=>Student(line(0).toInt,line(1),line(2),line(3))).toDF()
    //完成数据之间的join操作
    infoDF.join(infoDF_two,infoDF.col("id")===infoDF_two.col("id")).show(false)
    spark.close()
  }
   case class Student(id:Int,name:String,phone:String,email:String)
}

 相应语句在在应用到spark-shell或者提交到集群都有相应的产出。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值