文本数据
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学习记录相关推荐

  1. 学习笔记Spark(七)—— Spark SQL应用(2)—— Spark DataFrame基础操作

    二.Spark DataFrame基础操作 2.1.DataFrame DataFrame是一种不可变的分布式数据集,这种数据集被组织成指定的列,类似于关系数据库中的表. 数据集的每一列都带有名称和类 ...

  2. 大数据之spark学习记录二: Spark的安装与上手

    大数据之spark学习记录二: Spark的安装与上手 文章目录 大数据之spark学习记录二: Spark的安装与上手 Spark安装 本地模式 Standalone 模式 基本配置 步骤1: 复制 ...

  3. Spark菜鸟学习营Day5 分布式程序开发

    Spark菜鸟学习营Day5 分布式程序开发 这一章会和我们前面进行的需求分析进行呼应,完成程序的开发. 开发步骤 分布式系统开发是一个复杂的过程,对于复杂过程,我们需要分解为简单步骤的组合. 针对每 ...

  4. 基于Alluxio系统的Spark DataFrame高效存储管理技术

    介绍 越来越多的公司和组织开始将Alluxio和Spark一起部署从而简化数据管理,提升数据访问性能.Qunar最近将Alluxio部署在他们的生产环境中,从而将Spark streaming作业的平 ...

  5. 2022年Spark基础学习笔记目录

    一.Spark学习笔记 在私有云上创建与配置虚拟机 Spark基础学习笔记01:初步了解Spark Spark基础学习笔记02:Spark运行时架构 Spark基础学习笔记03:搭建Spark单机版环 ...

  6. spark的学习(2)之计算最受欢迎美食种类然后画词云

    上一篇文章主要讲的是spark如何进行词频统计,数据集为自己创建的,本篇主要使用上一篇的逻辑在实际应用中进行扩展-计算广州美食中最受欢迎的美食类别,然后把数据画成词云. 本篇是上一篇spark的学习( ...

  7. Spark-Core源码学习记录 3 SparkContext、SchedulerBackend、TaskScheduler初始化及应用的注册流程

    Spark-Core源码学习记录 该系列作为Spark源码回顾学习的记录,旨在捋清Spark分发程序运行的机制和流程,对部分关键源码进行追踪,争取做到知其所以然,对枝节部分源码仅进行文字说明,不深入下 ...

  8. 卡狗项目学习记录 - Churning Customers Prediction

    卡狗项目学习记录-Churning Customers Prediction 1. 数据预处理 1.1 导入需要的包 1.2 读取数据集 1.3 数据分析 1.3.1 Customer_Age 1) ...

  9. Pytorch学习记录-torchtext和Pytorch的实例( 使用神经网络训练Seq2Seq代码)

    Pytorch学习记录-torchtext和Pytorch的实例1 0. PyTorch Seq2Seq项目介绍 1. 使用神经网络训练Seq2Seq 1.1 简介,对论文中公式的解读 1.2 数据预 ...

最新文章

  1. 虚拟化文件服务器,VMware虚拟化效率之文件服务器性能测试(上)
  2. SQLmap工具常用命令
  3. 让Team Exploer自动登录TFS
  4. 图片去字工具_这些免费工具轻松提取图片中的文字,别再傻傻地手工去输了
  5. VS2017 安装 QT5.9
  6. SQL Server备份账号和密码
  7. DIV+CSS布局总结
  8. 用nginx转发请求tomcat 如何配置访问日志获取真实ip
  9. 自己动手丰衣足食-自己动手修改GBA ROM游戏文件
  10. matlab pascal函数,pascal常用函数较全
  11. Unity插件——Odin使用心得(一)
  12. HAV-down1.1vs 大黄峰资源搜索 绿色特别版
  13. snb处理器hd3000显卡专用extra_最强i9-9900K处理器造就最强主机!华硕ROG GL12CX评测...
  14. sql中的函数取余数
  15. indesign怎么拼图_自己动手制作个性相册
  16. IGRP中的RTP、Neighbor Discovery协议及Time总结
  17. 求最小公倍数的三种方法(C语言)
  18. javascript之动态时钟
  19. iOS 在TabBarController视图切换的时候添加动画
  20. 云计算实验2 Spark分布式内存计算框架配置及编程案例

热门文章

  1. linux7.0下mysql_CentOS 7.0下使用yum安装MySQL
  2. 扫描服务器用户,服务器安全工具(自动扫描后门路径)
  3. c语言删除链表中特定元素,Leetcode203. 删除链表中的元素_C语言
  4. java默认异常处理_spring boot 默认异常处理的实现
  5. python做项目管理代码_代码发布项目(三)——python操作git、代码发布流程(服务器管理、项目管理)...
  6. python怎么操作_python怎么操作mysql
  7. python协同过滤算法_协同过滤算法介绍及算法实现
  8. 基于AUTOSAR的AP平台的应用开发
  9. 计算机组成原理 第四章 指令系统
  10. 计算机算法设计与分析 递归实现快速排序和随机化实现快速排序