Spark系列--SparkSQL(四)RDD、DataFrame、DataSet之间的转换

本文详细介绍了Spark中RDD、DataFrame和DataSet之间的转换方法,包括从RDD转换为DataFrame,RDD到DataSet,DataFrame到DataSet,以及DataFrame和DataSet间的相互转换。转换过程中涉及的反射、Schema设置及case类的使用等关键点均有阐述。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

创建DataFrame主要有三种方式:

  • 从Spark数据源进行创建
  • 从RDD进行转换
  • 从Hive Table进行查询返回(后面讲述)

一、RDD 和 DataFrame之间的转换

准备测试RDD数据

scala> val rdd=sc.makeRDD(List("Mina,19","Andy,30","Michael,29"))
rdd: org.apache.spark.rdd.RDD[String] = ParallelCollectionRDD[10] at makeRDD at <console>:24

需要注意,只有import spark.implicits._之后,RDD才有toDF、toDS功能

scala> import spark.implicits._
import spark.implicits._

(1)RDD转换成DataFrame

1、toDF

scala> rdd.map{x=>val par=x.split(",");(par(0),par(1).toInt)}.toDF("name","age")
res3: org.apache.spark.sql.DataFrame = [name: string, age: int]

scala> res3.show
+-------+---+
|   name|age|
+-------+---+
|   Mina| 19|
|   Andy| 30|
|Michael| 29|
+-------+---+

2、通过反射获取Scheam

SparkSQL能够自动将包含有case类的RDD转换成DataFrame,case类定义了table的结构,case类属性通过反射变成了表的列名。Case类可以包含诸如Seqs或者Array等复杂的结构。

scala> case class Person(name:String,age:Int)
defined class Person

scala> val
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值