spark dataframe学习记录
文本数据
id,name,balance
1,Alice,100
2,Bob,200
3,Charlie,300
4,Denis,400
5,Edith,500
定义case class, 参数名即为表的列名
case class Account(id: Int, name: String, balance: Double)
从hdfs上的文本创建rdd
val rdd = sc.textFile("/tmp/wht/account/accounts.txt").map(_.split(","))
scala> rdd.collect()
res3: Array[Array[String]] = Array(Array(1, Alice, 100), Array(2, Bob, 200), Array(3, Charlie, 300), Array(4, Denis, 400), Array(5, Edith, 500))
创建包含case class的rdd
val rddContainingCaseClass = rdd.map(p => Account(p(0).trim.toInt, p(1),p(2).trim.toDouble))
scala> rddContainingCaseClass.collect()
res1: Array[Account] = Array(Account(1,Alice,100.0), Account(2,Bob,200.0), Account(3,Charlie,300.0), Account(4,Denis,400.0), Account(5,Edith,500.0))
将包含case class的RDD转换为DataFrame
val account = rddContainingCaseClass.toDF()
------------------DataFrame的基本操作------------------
将DataFrame的内容打印到标准输出
account.show()
+---+-------+-------+
| id| name|balance|
+---+-------+-------+
| 1| Alice| 100.0|
| 2| Bob| 200.0|
| 3|Charlie| 300.0|
| 4| Denis| 400.0|
| 5| Edith| 500.0|
+---+-------+-------+
scala> account.select("id").show()
+---+
| id|
+---+
| 1|
| 2|
| 3|
| 4|
| 5|
+---+
scala> account.filter(account("id")>3).show()
+---+-----+-------+
| id| name|balance|
+---+-----+-------+
| 4|Denis| 400.0|
| 5|Edith| 500.0|
+---+-----+-------+
------------------将DataFrame保存为文件------------------
scala> account.select("name", "balance").write.save("nameAndBanlance.parquet")
18/10/19 10:57:25 INFO ParquetRelation: Listing hdfs://zetdep07.zetyun.com:8020/user/root/nameAndBanlance.parquet on driver
下载到本地:
hdfs dfs -get /user/root/nameAndBanlance.parquet
cd nameAndBanlance.parquet
[root@zetdep07 nameAndBanlance.parquet]# ll
总用量 16
-rw-r--r-- 1 root root 295 10月 19 10:57 _common_metadata
-rw-r--r-- 1 root root 777 10月 19 10:57 _metadata
-rw-r--r-- 1 root root 579 10月 19 10:57 part-r-00000-0874d8eb-1fe9-4f4c-bee9-3b01c545f236.gz.parquet
-rw-r--r-- 1 root root 561 10月 19 10:57 part-r-00001-0874d8eb-1fe9-4f4c-bee9-3b01c545f236.gz.parquet
-rw-r--r-- 1 root root 0 10月 19 10:57 _SUCCESS
保存为orcfile格式
scala> account.select("name", "balance").write.format("orc")save("nameAndBanlance.orc")
18/10/19 11:04:12 INFO OrcRelation: Listing hdfs://zetdep07.zetyun.com:8020/user/root/nameAndBanlance.orc on driver
下载到本地:
hdfs dfs -get /user/root/nameAndBanlance.orc
cd nameAndBanlance.orc
[root@zetdep07 nameAndBanlance.orc]# ll
总用量 8
-rw-r--r-- 1 root root 388 10月 19 11:05 part-r-00000-c656867f-d515-4ac1-b853-1cb62820d262.orc
-rw-r--r-- 1 root root 374 10月 19 11:05 part-r-00001-c656867f-d515-4ac1-b853-1cb62820d262.orc
-rw-r--r-- 1 root root 0 10月 19 11:05 _SUCCESS
------------------将DataFrame注册为表------------------
account.registerTempTable("accountTable")
scala> val result = sqlContext.sql("SELECT * FROM accountTable")
18/10/19 10:48:48 INFO ParseDriver: Parsing command: SELECT * FROM accountTable
18/10/19 10:48:48 INFO ParseDriver: Parse Completed
result: org.apache.spark.sql.DataFrame = [id: int, name: string, balance: double]
val result = sqlContext.sql("SELECT * FROM accountTable").collect()
result: Array[org.apache.spark.sql.Row] = Array([1,Alice,100.0], [2,Bob,200.0], [3,Charlie,300.0], [4,Denis,400.0], [5,Edith,500.0])
--------将parquet文件读取为dataframe-------
val dfpar = sqlContext.read.load("/user/root/nameAndBanlance.parquet")
scala> dfpar.select("name","balance").show()
+-------+-------+
| name|balance|
+-------+-------+
| Alice| 100.0|
| Bob| 200.0|
|Charlie| 300.0|
| Denis| 400.0|
| Edith| 500.0|
+-------+-------+
scala> dfpar.printSchema
root
|-- name: string (nullable = true)
|-- balance: double (nullable = true)
--------将orc文件读取为dataframe-------
val dforc = sqlContext.read.format("orc").load("/user/root/nameAndBanlance.orc")
scala> dforc.select("name","balance").show()
+-------+-------+
| name|balance|
+-------+-------+
| Alice| 100.0|
| Bob| 200.0|
|Charlie| 300.0|
| Denis| 400.0|
| Edith| 500.0|
+-------+-------+
scala> dforc.printSchema
root
|-- name: string (nullable = true)
|-- balance: double (nullable = true)
--------将json文件读取为dataframe-------
scala> val dfjson = sqlContext.read.format("json").load("/tmp/wht/employee/employee.json")
dfjson: org.apache.spark.sql.DataFrame = [_corrupt_record: string, firstName: string, lastName: string]
scala> dfjson.select("firstName","lastName").show()
+---------+--------+
|firstName|lastName|
+---------+--------+
| null| null|
| null| null|
| Bill| Gates|
| George| Bush|
| Thomas| Carter|
| null| null|
| null| null|
+---------+--------+
scala> dfjson.collect()
res22: Array[org.apache.spark.sql.Row] = Array([{,null,null], ["employees": [,null,null], [null,Bill,Gates], [null,George,Bush], [null,Thomas,Carter], [],null,null], [},null,null])
scala> dfjson.printSchema
root
|-- _corrupt_record: string (nullable = true)
|-- firstName: string (nullable = true)
|-- lastName: string (nullable = true)
spark dataframe学习记录相关推荐
- 学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作
二.Spark DataFrame基础操作 2.1.DataFrame DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表. 数据集的每一列都带有名称和类 ...
- 大数据之spark学习记录二: Spark的安装与上手
大数据之spark学习记录二: Spark的安装与上手 文章目录 大数据之spark学习记录二: Spark的安装与上手 Spark安装 本地模式 Standalone 模式 基本配置 步骤1: 复制 ...
- Spark菜鸟学习营Day5 分布式程序开发
Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...
- 基于Alluxio系统的Spark DataFrame高效存储管理技术
介绍 越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理,提升数据访问性能.Qunar最近将Alluxio部署在他们的生产环境中,从而将Spark streaming作业的平 ...
- 2022年Spark基础学习笔记目录
一.Spark学习笔记 在私有云上创建与配置虚拟机 Spark基础学习笔记01:初步了解Spark Spark基础学习笔记02:Spark运行时架构 Spark基础学习笔记03:搭建Spark单机版环 ...
- spark的学习(2)之计算最受欢迎美食种类然后画词云
上一篇文章主要讲的是spark如何进行词频统计,数据集为自己创建的,本篇主要使用上一篇的逻辑在实际应用中进行扩展-计算广州美食中最受欢迎的美食类别,然后把数据画成词云. 本篇是上一篇spark的学习( ...
- Spark-Core源码学习记录 3 SparkContext、SchedulerBackend、TaskScheduler初始化及应用的注册流程
Spark-Core源码学习记录 该系列作为Spark源码回顾学习的记录,旨在捋清Spark分发程序运行的机制和流程,对部分关键源码进行追踪,争取做到知其所以然,对枝节部分源码仅进行文字说明,不深入下 ...
- 卡狗项目学习记录 - Churning Customers Prediction
卡狗项目学习记录-Churning Customers Prediction 1. 数据预处理 1.1 导入需要的包 1.2 读取数据集 1.3 数据分析 1.3.1 Customer_Age 1) ...
- Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)
Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...
最新文章
- 虚拟化文件服务器,VMware虚拟化效率之文件服务器性能测试(上)
- SQLmap工具常用命令
- 让Team Exploer自动登录TFS
- 图片去字工具_这些免费工具轻松提取图片中的文字,别再傻傻地手工去输了
- VS2017 安装 QT5.9
- SQL Server备份账号和密码
- DIV+CSS布局总结
- 用nginx转发请求tomcat 如何配置访问日志获取真实ip
- 自己动手丰衣足食-自己动手修改GBA ROM游戏文件
- matlab pascal函数,pascal常用函数较全
- Unity插件——Odin使用心得(一)
- HAV-down1.1vs 大黄峰资源搜索 绿色特别版
- snb处理器hd3000显卡专用extra_最强i9-9900K处理器造就最强主机!华硕ROG GL12CX评测...
- sql中的函数取余数
- indesign怎么拼图_自己动手制作个性相册
- IGRP中的RTP、Neighbor Discovery协议及Time总结
- 求最小公倍数的三种方法(C语言)
- javascript之动态时钟
- iOS 在TabBarController视图切换的时候添加动画
- 云计算实验2 Spark分布式内存计算框架配置及编程案例
热门文章
- linux7.0下mysql_CentOS 7.0下使用yum安装MySQL
- 扫描服务器用户,服务器安全工具(自动扫描后门路径)
- c语言删除链表中特定元素,Leetcode203. 删除链表中的元素_C语言
- java默认异常处理_spring boot 默认异常处理的实现
- python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...
- python怎么操作_python怎么操作mysql
- python协同过滤算法_协同过滤算法介绍及算法实现
- 基于AUTOSAR的AP平台的应用开发
- 计算机组成原理 第四章 指令系统
- 计算机算法设计与分析 递归实现快速排序和随机化实现快速排序