DataFrame概述与使用

本文介绍了DataFrame的概念,对比了DataFrame和RDD的区别,并通过实例展示了DataFrame对json文件的操作,包括读取、打印schema、显示内容、选择字段等。还讨论了DataFrame上的Action操作,如创建case class、过滤、排序、分组等,以及DataFrame API实现文件操作的基本步骤。
摘要由CSDN通过智能技术生成

一、 概述:

        DataFrame是一个分布式数据集,可以理解为关系型数据库一张表,由字段和字段类型、字段值按列组织,且支持四种语言,在Scala API中可以理解为: FataFrame=Dataset[ROW]


注:DataFrame产生于V1.3之后,在V1.3前为SchemaRDD,在V1.6以后又添加了Dataset



二、DataFrame vs RDD 差异:


概念 : 两个都是分布式容器,DF理解是一个表格除了RDD数据以外还有Schema,也支持复杂数据类型(map..)
API :
DataFrame提供的API比RDD丰富 支持map  filter  flatMap .....
数据结构:RDD知道类型没有结构, DF提供Schema信息 有利于优化,性能上好
底层 :基于运行环境不一样,RDD开发的Java/Scala API运行底层环境JVM,
DF在SparkSQL中转换成逻辑执行计划(locaical Plan)和物理执行计划(Physical Plan)中间自身优化功能,性能差异大


三、json文件操作

[hadoop@hadoop001 bin]$./spark-shell --master local[2] --jars ~/software/mysql-connector-java-5.1.34-bin.jar 


-- 读取json文件

scala>val df = spark.read.json("file:///home/hadoop/data/people.json")

18/09/02 11:47:20 WARN ObjectStore: Failed to get database global_temp, returning NoSuchObjectException

df: org.apache.spark.sql.DataFrame = [age: bigint, name: string]


-- 打印schema信息

scala> df.printSchema


root

|-- age: long (nullable = true)    -- 字段 类型 允许为空
|-- name: string (nullable = true)


--  打印字段内容

scala> df.show


+----+-------+

| age|   name|
+----+-------+
|null|Michael|
|  30|   Andy|
|  19| Justin|
+----+-------+

-- 打印查询字段

scala> df.select("name").show


+-------+

|   name|
+-------+
|Michael| 
|   Andy|
| Justin|
+-------+


-- 单引号,存在隐式转换

scala> df.select('name).show


+-------+

|   name|
+-------+
|Michael|
|   Andy|
| Justin|
+-------+


-- 双引号隐式转换不识别

scala> df.select("name).show

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值