Spark SQL实战(06)-RDD与DataFrame的互操作

简介: 包含特定对象类型的 RDD 的schema。这种基于反射的方法可以使代码更简洁,在编写 Spark 应用程序时已知schema时效果很好

val spark = SparkSession.builder()

 .master("local").appName("DatasetApp")

 .getOrCreate()


Spark SQL支持两种不同方法将现有RDD转换为DataFrame:


1 反射推断

包含特定对象类型的 RDD 的schema。

这种基于反射的方法可以使代码更简洁,在编写 Spark 应用程序时已知schema时效果很好


val peopleRDD: RDD[String] = spark.sparkContext.textFile(

 "/Users/javaedge/Downloads/sparksql-train/data/people.txt")


// RDD => DF

// RDD

val peopleDF: DataFrame = peopleRDD.map(_.split(","))

 // RDD

 .map(x => People(x(0), x(1).trim.toInt))

 // DF

 .toDF()


2 通过编程接口

构造一个schema,然后将其应用到现有的 RDD。


虽然这种方法更冗长,但它允许在运行时构造 Dataset,当列及其类型直到运行时才知道时很有用。


step1

val peopleRDD: RDD[String] = spark.sparkContext.textFile(

 "/Users/javaedge/Downloads/sparksql-train/data/people.txt")

// RDD

val peopleRowRDD: RDD[Row] = peopleRDD.map(_.split(","))

 .map(x => Row(x(0), x(1).trim.toInt))


step2

val struct = StructType(

   StructField("name", StringType, nullable = true) ::

     StructField("age", IntegerType, nullable = false) :: Nil)


step3

使用SparkSession的createDataFrame方法将RDD转换为DataFrame

val peopleDF: DataFrame = spark.createDataFrame(peopleRowRDD, struct)

peopleDF.show()

目录
相关文章
|
2月前
|
分布式计算 并行计算 大数据
Spark学习---day02、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---day02、Spark核心编程 RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
|
2月前
|
分布式计算 Java Scala
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
Spark学习---day03、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(二)
|
12天前
|
SQL 自然语言处理 数据库
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
NL2SQL实践系列(2):2024最新模型实战效果(Chat2DB-GLM、书生·浦语2、InternLM2-SQL等)以及工业级案例教学
|
16天前
|
SQL 数据库
数据库SQL语言实战(二)
数据库SQL语言实战(二)
|
22天前
|
SQL 存储 关系型数据库
【MySQL实战笔记】02.一条SQL更新语句是如何执行的-2
【4月更文挑战第5天】两阶段提交是为确保`redo log`和`binlog`逻辑一致,避免数据不一致。若先写`redo log`, crash后数据可能丢失,导致恢复后状态错误;若先写`binlog`,crash则可能导致重复事务,影响数据库一致性。一天一备相较于一周一备,能缩短“最长恢复时间”,但需权衡额外的存储成本。
16 1
|
2月前
|
存储 分布式计算 Spark
实战|使用Spark Streaming写入Hudi
实战|使用Spark Streaming写入Hudi
49 0
|
2月前
|
分布式计算 Spark
Spark【Spark学习大纲】简介+生态+RDD+安装+使用(xmind分享)
【2月更文挑战第14天】Spark【Spark学习大纲】简介+生态+RDD+安装+使用(xmind分享)
32 1
|
2月前
|
分布式计算 Hadoop Java
Spark【基础知识 03】【RDD常用算子详解】(图片来源于网络)
【2月更文挑战第14天】Spark【基础知识 03】【RDD常用算子详解】(图片来源于网络)
59 1
|
2月前
|
存储 缓存 分布式计算
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
Spark学习--day04、RDD依赖关系、RDD持久化、RDD分区器、RDD文件读取与保存
|
3月前
|
分布式计算 并行计算 Hadoop
Spark学习---day02、Spark核心编程(RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)
Spark学习---day02、Spark核心编程 RDD概述、RDD编程(创建、分区规则、转换算子、Action算子))(一)