RDD、DataFrame与DataSet的相互转换

RDD、DataFrame与DataSet三者有许多的共性,都有各自使用的场景,常常需要在三者之间进行转换

DataFrame/Dataset 转 RDD:

val rdd1=testDF.rdd

val rdd2=testDS.rdd

RDD 转 DataFrame:

// 一般用元组把一行的数据写在一起,然后在toDF中指定字段名

import spark.implicits._

val testDF = rdd.map {line=>

(line._1,line._2)

}.toDF("col1","col2")

RDD 转 Dataet:

// 核心就是要定义case class

import spark.implicits._

case class Coltest(col1:String, col2:Int)

val testDS = rdd.map{line=>Coltest(line._1,line._2)}.toDS

DataSet 转 DataFrame:

// 这个转换简单,只是把 case class 封装成Row

import spark.implicits._

val testDF = testDS.toDF

DataFrame 转 DataSet:

// 每一列的类型后,使用as方法(as方法后面还是跟的case class,这个是核心),转成Dataset。

import spark.implicits._

case class Coltest … …

val testDS = testDF.as[Coltest]

特别注意:

在使用一些特殊操作时,一定要加上import spark.implicits._ 不然toDF、toDS无法使用

三者转换关系图:

原文地址:https://www.cnblogs.com/Gxiaobai/p/12239086.html

时间: 2024-08-30 05:19:29

RDD、DataFrame与DataSet的相互转换的相关文章

Spark RDD、DataFrame和DataSet的区别

版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 转载请标明出处:小帆的帆的专栏 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接通过类名点的方式来操作数据 缺点: 序列化和反序列化的性能开销 无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化. GC的性能开销 频繁的创建和销毁对象, 势必会增加GC import org.apache.spark.sql.SQLContext import org.apache

spark结构化数据处理:Spark SQL、DataFrame和Dataset

本文讲解Spark的结构化数据处理,主要包括:Spark SQL.DataFrame.Dataset以及Spark SQL服务等相关内容.本文主要讲解Spark 1.6.x的结构化数据处理相关东东,但因Spark发展迅速(本文的写作时值Spark 1.6.2发布之际,并且Spark 2.0的预览版本也已发布许久),因此请随时关注Spark SQL官方文档以了解最新信息. 文中使用Scala对Spark SQL进行讲解,并且代码大多都能在spark-shell中运行,关于这点请知晓. 概述 相比于

spark的数据结构 RDD——DataFrame——DataSet区别

转载自:http://blog.csdn.net/wo334499/article/details/51689549 RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接通过类名点的方式来操作数据 缺点: 序列化和反序列化的性能开销 无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化. GC的性能开销 频繁的创建和销毁对象, 势必会增加GC import org.apache.spark.sql.SQLContext import org

sparkSQL中RDD——DataFrame——DataSet的区别

spark中RDD.DataFrame.DataSet都是spark的数据集合抽象,RDD针对的是一个个对象,但是DF与DS中针对的是一个个Row RDD 优点: 编译时类型安全 编译时就能检查出类型错误 面向对象的编程风格 直接通过类名点的方式来操作数据 缺点: 序列化和反序列化的性能开销 无论是集群间的通信,还是IO操作都需要对对象的结构和数据进行序列化和反序列化 GC的性能开销,频繁的创建和销毁对象,势必会增加GC开销 DataFrameDataFrame引入了schema和off-hea

RDD、DataFrame和DataSet的区别

原文链接:http://www.jianshu.com/p/c0181667daa0 RDD.DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同. RDD和DataFrame RDD-DataFrame 上图直观地体现了DataFrame和RDD的区别.左侧的RDD[Person]虽然以Person为类型参数,但Spark框架本身不了解Person类的内部结构.而右侧的DataFrame却提供了详细的结构信息,使得Spark SQL可以清楚地知道该数

Apache Spark 2.0三种API的传说:RDD、DataFrame和Dataset

Apache Spark吸引广大社区开发者的一个重要原因是:Apache Spark提供极其简单.易用的APIs,支持跨多种语言(比如:Scala.Java.Python和R)来操作大数据. 本文主要讲解Apache Spark 2.0中RDD,DataFrame和Dataset三种API:它们各自适合的使用场景:它们的性能和优化:列举使用DataFrame和DataSet代替RDD的场景.文章大部分聚焦DataFrame和Dataset,因为这是Apache Spark 2.0的API统一的重

RDD、DataFrame和DataSet

https://blog.csdn.net/weixin_43087634/article/details/84398036 2.什么是DataFrame 在Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格. 3.RDD和DataFrame的区别 DataFrame与RDD的主要区别在于,DataFrame带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型.使得Spark SQL得以洞察更多的结构信息,从而对藏

DataFrame 转换为Dataset

写在前面: A DataFrame is a Dataset organized into named columns. A Dataset is a distributed collection of data. 贴代码: package february.sql import org.apache.spark.sql.SparkSession /** * Description: * DataFrame 转换为Dataset * DataSet的操作 * * @Author: 留歌36 *

Spark RDD(Resilient Distributed Dataset)

基于数据集的处理:从物理存储上加载数据,然后操作数据,然后写入物理存储设备.比如Hadoop的MapReduce.        缺点:1.不适合大量的迭代  2. 交互式查询  3. 不能复用曾经的结果或中间计算结果 基于工作集的处理:如Spark的RDD.RDD具有如下的弹性: 1. 自动的进行内存和磁盘数据存储的切换           2. 基于Lineage的高效容错           3. Task如果失败会自动进行特定次数的重试           4. Stage如果失败会自动