Apache Spark DataFrames入门指南:创建DataFrame(2)

2024-05-27 12:58

本文主要是介绍Apache Spark DataFrames入门指南:创建DataFrame(2),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本系列文章翻译自:《scala data analysis cookbook》第二章:Getting Started with Apache  Spark DataFrames。原书是基于 Spark 1.4.1编写的,我这里使用的是Spark 1.6.0,丢弃了一些已经标记为遗弃的函数。并且修正了其中的错误。
  一、从csv文件创建DataFrame
    如何做?
    如何工作的
    附录
  二、操作DataFrame
    打印DataFrame里面的模式
    对DataFrame里面的数据进行采样
    查询DataFrame里面的列
    根据条件过滤数据
    对DataFrame里面的数据进行排序
    对列进行重命名
    将DataFrame看作是关系型数据表
    对两个DataFrame进行Join操作
    将DataFrame保存成文件
三、从Scala case class中创建DataFrame
    如何做?
    如何工作的
    附录

三、从Scala case class中创建DataFrame

  在这篇文章中,你将学到如何从Scala case class中创建DataFrame。

如何做?

  1、我们首先创建一个case class,名为Employee,并且定义id和name两个参数,如下:

case class Employee(id : Int, name : String)

和先前一样,我们分别定义SparkConf、SparkContext以及SQLContext:

val conf = new SparkConf().setAppName( "colRowDataFrame" ). setMaster( "local[2]" )
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)

  2、我们可以通过很多方式来初始化Employee类,比如从关系型数据库中获取数据以此来定义Employee类。但是在本文为了简单起见,我将直接定义一个Employee类的List,如下:

val listOfEmployees = List(Employee( 1 , "iteblog" ), Employee( 2 , "Jason" ), Employee( 3 , "Abhi" ))

  3、我们将listOfEmployees列表传递给SQLContext类的createDataFrame 函数,这样我们就可以创建出DataFrame了!然后我们可以调用DataFrame的printuSchema函数,打印出该DataFrame的模式,我们可以看出这个DataFrame主要有两列:name和id,这正是我们定义Employee的两个参数,并且类型都一致。

val empFrame = sqlContext.createDataFrame(listOfEmployees)
empFrame.printSchema
root
  |-- id : integer (nullable = false )
  |-- name : string (nullable = true )

之所以DataFrame打印出的模式和Employee类的两个参数一致,那是因为DataFrame内部通过反射获取到的。

  4、如果你对默认反射获取到的模式名称不感兴趣,你可以通过withColumnRenamed函数来指定列名:

val empFrameWithRenamedColumns = sqlContext.createDataFrame(listOfEmployees).withColumnRenamed( "id" , "empId" )
empFrameWithRenamedColumns.printSchema
root
  |-- empId : integer (nullable = false )
  |-- name : string (nullable = true )

  5、我们可以使用Spark支持的SQL功能来查询相关的数据。在使用这个功能之前,我们必须先对DataFrame注册成一张临时表,我们可以使用registerTempTable函数实现,如下:

empFrameWithRenamedColumns.registerTempTable( "employeeTable" )

  6、现在我们就可以使用SQL语句来查询DataFrame里面的数据了:

val sortedByNameEmployees = sqlContext.sql( "select * from employeeTable order by name desc" )
sortedByNameEmployees.show()
+-----+-------+
|empId|   name|
+-----+-------+
|    1 |iteblog|
|    2 |  Jason|
|    3 |   Abhi|
+-----+-------+

它如何工作的

  createDataFrame函数可以接收一切继承scala.Product类的集合对象:

def createDataFrame[A < : Product : TypeTag](rdd : RDD[A]) : DataFrame

而case class类就是继承了Product。我们所熟悉的TupleN类型也是继承了scala.Product类的,所以我们也可以通过TupleN来创建DataFrame:

val mobiles = sqlContext.createDataFrame(Seq(( 1 , "Android" ), ( 2 , "iPhone" ))) mobiles.printSchema mobiles.show()
root
  |-- _ 1 : integer (nullable = false )
  |-- _ 2 : string (nullable = true )
+---+-------+
| _ 1 |     _ 2 |
+---+-------+
1 |Android|
2 | iPhone|
+---+-------+

  我们知道,Tuple2的默认两个参数名字分别是_1和_2,同样,我们如果对这个默认的名字不是特别喜欢,我们也是可以通过withColumnRenamed函数对默认反射的列名进行重命名。


 转载自过往记忆(http://www.iteblog.com/)

这篇关于Apache Spark DataFrames入门指南:创建DataFrame(2)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1007539

相关文章

Python日期和时间完全指南与实战

《Python日期和时间完全指南与实战》在软件开发领域,‌日期时间处理‌是贯穿系统设计全生命周期的重要基础能力,本文将深入解析Python日期时间的‌七大核心模块‌,通过‌企业级代码案例‌揭示最佳实践... 目录一、背景与核心价值二、核心模块详解与实战2.1 datetime模块四剑客2.2 时区处理黄金法

Spring Boot集成Logback终极指南之从基础到高级配置实战指南

《SpringBoot集成Logback终极指南之从基础到高级配置实战指南》Logback是一个可靠、通用且快速的Java日志框架,作为Log4j的继承者,由Log4j创始人设计,:本文主要介绍... 目录一、Logback简介与Spring Boot集成基础1.1 Logback是什么?1.2 Sprin

ubuntu如何部署Dify以及安装Docker? Dify安装部署指南

《ubuntu如何部署Dify以及安装Docker?Dify安装部署指南》Dify是一个开源的大模型应用开发平台,允许用户快速构建和部署基于大语言模型的应用,ubuntu如何部署Dify呢?详细请... Dify是个不错的开源LLM应用开发平台,提供从 Agent 构建到 AI workflow 编排、RA

ubuntu系统使用官方操作命令升级Dify指南

《ubuntu系统使用官方操作命令升级Dify指南》Dify支持自动化执行、日志记录和结果管理,适用于数据处理、模型训练和部署等场景,今天我们就来看看ubuntu系统中使用官方操作命令升级Dify的方... Dify 是一个基于 docker 的工作流管理工具,旨在简化机器学习和数据科学领域的多步骤工作流。

C++迭代器失效的避坑指南

《C++迭代器失效的避坑指南》在C++中,迭代器(iterator)是一种类似指针的对象,用于遍历STL容器(如vector、list、map等),迭代器失效是指在对容器进行某些操作后... 目录1. 什么是迭代器失效?2. 哪些操作会导致迭代器失效?2.1 vector 的插入操作(push_back,

Java使用WebView实现桌面程序的技术指南

《Java使用WebView实现桌面程序的技术指南》在现代软件开发中,许多应用需要在桌面程序中嵌入Web页面,例如,你可能需要在Java桌面应用中嵌入一部分Web前端,或者加载一个HTML5界面以增强... 目录1、简述2、WebView 特点3、搭建 WebView 示例3.1 添加 JavaFX 依赖3

Linux高并发场景下的网络参数调优实战指南

《Linux高并发场景下的网络参数调优实战指南》在高并发网络服务场景中,Linux内核的默认网络参数往往无法满足需求,导致性能瓶颈、连接超时甚至服务崩溃,本文基于真实案例分析,从参数解读、问题诊断到优... 目录一、问题背景:当并发连接遇上性能瓶颈1.1 案例环境1.2 初始参数分析二、深度诊断:连接状态与

Android NDK版本迭代与FFmpeg交叉编译完全指南

《AndroidNDK版本迭代与FFmpeg交叉编译完全指南》在Android开发中,使用NDK进行原生代码开发是一项常见需求,特别是当我们需要集成FFmpeg这样的多媒体处理库时,本文将深入分析A... 目录一、android NDK版本迭代分界线二、FFmpeg交叉编译关键注意事项三、完整编译脚本示例四

C#实现高性能Excel百万数据导出优化实战指南

《C#实现高性能Excel百万数据导出优化实战指南》在日常工作中,Excel数据导出是一个常见的需求,然而,当数据量较大时,性能和内存问题往往会成为限制导出效率的瓶颈,下面我们看看C#如何结合EPPl... 目录一、技术方案核心对比二、各方案选型建议三、性能对比数据四、核心代码实现1. MiniExcel

POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能

《POI从入门到实战轻松完成EasyExcel使用及Excel导入导出功能》ApachePOI是一个流行的Java库,用于处理MicrosoftOffice格式文件,提供丰富API来创建、读取和修改O... 目录前言:Apache POIEasyPoiEasyExcel一、EasyExcel1.1、核心特性