iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >Spark SQL中的RDD与DataFrame转换实例用法
  • 893
分享到

Spark SQL中的RDD与DataFrame转换实例用法

2023-06-02 12:06:55 893人浏览 独家记忆
摘要

这篇文章主要讲解了“spark sql中的RDD与DataFrame转换实例用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spark SQL中的RDD与DataFrame转换实例用法”吧

这篇文章主要讲解了“spark sql中的RDD与DataFrame转换实例用法”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Spark SQL中的RDD与DataFrame转换实例用法”吧!

一.第一种方式RDD转化为DataFrame

1.官网

Spark SQL中的RDD与DataFrame转换实例用法

2.解释

反射把schema信息全部定义在case class 类里面

3.代码

package coreimport org.apache.spark.sql.SparkSessionimport org.apache.spark.sql.types.StructTypeobject Test {  def main(args: Array[String]): Unit = {    val spark = SparkSession.builder()      .appName("Test")      .master("local[2]")      .getOrCreate()    val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt")    import spark.implicits._    val result = mess.map(_.split(",")).map(x => Info(x(0).toInt,x(1),x(2).toInt)).toDF()   // result.map(x => x(0)).show() //在1.x 版本是可以的 在2.x不可以需要价格rdd    result.rdd.map(x => x(0)).collect().foreach(println)    result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println)  }}case class Info(id:Int,name:String,age:Int)

4.注意事项

注意2.2版本以前 类的构造方法参数有限在2.2后没有限制了

Spark SQL中的RDD与DataFrame转换实例用法

二.第二种转换方式

1.官网

Spark SQL中的RDD与DataFrame转换实例用法

2.解释

制定scheme信息 就是编程的方式   作用到Row 上面

3.步骤

Spark SQL中的RDD与DataFrame转换实例用法

4.步骤解释

从原有的RDD转化 ,类似于textFile一个StructType匹配Row里面的数据结构(几列),就是几个StructField 通过createDataFrame  把schema与RDD关联上

5.源码解释StructType

Spark SQL中的RDD与DataFrame转换实例用法

6.源码解释

StructField 可以理解为一列StructType  包含  1-n 个StructField

7.最终代码

package coreimport org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}import org.apache.spark.sql.{Row, SparkSession}object TestRDD2 {  def main(args: Array[String]): Unit = {    val spark = SparkSession.builder()      .appName("TestRDD2")      .master("local[2]")      .getOrCreate()    val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt")    val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt))    //工作中这样写    val structType = new StructType(      Array(          StructField("id", IntegerType, true),          StructField("name", StringType, true),          StructField("age", IntegerType, true)      )    )    val schema = StructType(structType)    val info = spark.createDataFrame(result,schema)    info.show()  }}

8.经典错误

Spark SQL中的RDD与DataFrame转换实例用法

9.原因解决

自己定义的schema信息与Row中的信息不匹配val result = mess.map(_.split(",")).map(x => Row(x(0), x(1), x(2)))//工作中这样写val structType = new StructType(  Array(      StructField("id", IntegerType, true),      StructField("name", StringType, true),      StructField("age", IntegerType, true)  ))上面的是string 要的是int ,一定要注意因为会经常出错要转化类型val result = mess.map(_.split(",")).map(x => Row(x(0).toInt, x(1), x(2).toInt))

三.方法的使用

1.spark-shell 有的方法在代码要自己隐士砖换

df.select('name).show  这个在spark-shell 可以或者df.select('name').show 但是代码里面不行,需要隐士转

2.show源码

show源码  默认是true  显示小于等于20条,对应行中的字符是false就全部显示出来show(30,false)   也是全部显示出来不会截断show(5)  但是后面的多与20字符就不会显示你可以show(5,false)

Spark SQL中的RDD与DataFrame转换实例用法

Spark SQL中的RDD与DataFrame转换实例用法

3.select方法源码

Spark SQL中的RDD与DataFrame转换实例用法

Spark SQL中的RDD与DataFrame转换实例用法

4.select 方法调用走的位置

df.select("name").show(false)import spark.implicits._//这样不隐士转换不行df.select('name).show(false)df.select($"name")第一个select走的底层源码是 第一个源码图2,3个select走的源码是第二个

5.head源码

head 默认调第一条,你想展示几条就调几条

Spark SQL中的RDD与DataFrame转换实例用法

6.first() 展示第一条  底层调用的是head

Spark SQL中的RDD与DataFrame转换实例用法

7.sort源码

sort源码默认升序降序解释中有

Spark SQL中的RDD与DataFrame转换实例用法

四.sql的操作方法

1.官网临时试图

Spark SQL中的RDD与DataFrame转换实例用法

2.全局试图操作

全局视图加上  global_temp 规定

Spark SQL中的RDD与DataFrame转换实例用法

五.杂项

1.报错

Spark SQL中的RDD与DataFrame转换实例用法

2.原因及代码

 val spark = SparkSession.builder()   .appName("Test")   .master("local[2]")   .getOrCreate() val mess = spark.sparkContext.textFile("file:///D:\\test\\person.txt") import spark.implicits._ val result = mess.map(_.split(",")).map(x => Info(x(0).toInt,x(1),x(2).toInt)).toDF() //在1.x 版本是可以的 在2.x不可以需要价格rdd result.map(x => x(0)).show()  这样写是对的 result.rdd.map(x => x(0)).collect().foreach(println) 去类中的数据两种写法: result.rdd.map(x => x(0)).collect().foreach(println)result.rdd.map(x => x.getAs[Int]("id")).collect().foreach(println)

3.注意转义字符

对于分隔符 |   你切分一定要加转义字符,否则数据不对

感谢各位的阅读,以上就是“Spark SQL中的RDD与DataFrame转换实例用法”的内容了,经过本文的学习后,相信大家对Spark SQL中的RDD与DataFrame转换实例用法这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

--结束END--

本文标题: Spark SQL中的RDD与DataFrame转换实例用法

本文链接: https://www.lsjlt.com/news/230081.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作