首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >DataFrame常用API操作

DataFrame常用API操作

作者头像
羊羽shine
发布于 2019-08-27 02:03:24
发布于 2019-08-27 02:03:24
1.4K0
举报
文章被收录于专栏:Golang开发Golang开发

以列的(列名,列的类型。列值)的形式构成的分布式数据集,按照列赋予不同名称,约等于关系数据库的数据表

A DataFrame is a Dataset organized into named columns. It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood. DataFrames can be constructed from a wide array of sources such as: structured data files, tables in Hive, external databases, or existing RDDs. In Scala and Java, a DataFrame is represented by a Dataset of Rows. In the Scala API DataFrame is simply a type alias of Dataset[Row]. in Java API, users need to use Dataset<Row> to represent a DataFrame.

API操作

printSchema

打印Schema信息,以树形结构输出

代码语言:javascript
AI代码解释
复制
import org.apache.spark.sql.{DataFrame, SparkSession}

object DataFrameApp {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().
      appName("DataFrameApp").
      master("local[*]").
      getOrCreate()
    val peopleDF: DataFrame = spark.read.json("resources/people.json")
    peopleDF.printSchema()
    spark.stop()
  }
}

打印结果

代码语言:javascript
AI代码解释
复制
root
 |-- age: long (nullable = true)
 |-- name: string (nullable = true)
show

默认展示20条数据 ,通过参数指定展示的条数

代码语言:javascript
AI代码解释
复制
package cn.bx.spark

import org.apache.spark.sql.{DataFrame, SparkSession}

object DataFrameApp {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().
      appName("DataFrameApp").
      master("local[*]").
      getOrCreate()
    val peopleDF: DataFrame = spark.read.json("resources/people.json")
    peopleDF.show(1)
    spark.stop()
  }
}

打印结果

代码语言:javascript
AI代码解释
复制
+----+-------+
| age|   name|
+----+-------+
|null|Michael|
+----+-------+
only showing top 1 row
SLECT

指定输出列

代码语言:javascript
AI代码解释
复制
package cn.bx.spark

import org.apache.spark.sql.{DataFrame, SparkSession}

object DataFrameApp {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().
      appName("DataFrameApp").
      master("local[*]").
      getOrCreate()
    val peopleDF: DataFrame = spark.read.json("resources/people.json")
   peopleDF.select("name","age").show()
    spark.stop()
  }
}

打印结果

代码语言:javascript
AI代码解释
复制
+-------+----+
|   name| age|
+-------+----+
|Michael|null|
|   Andy|  30|
| Justin|  19|
+-------+----+

修改数据

代码语言:javascript
AI代码解释
复制
peopleDF.select(peopleDF.col("name"),peopleDF.col("age") + 1).show()

打印结果

代码语言:javascript
AI代码解释
复制
+-------+---------+
|   name|(age + 1)|
+-------+---------+
|Michael|     null|
|   Andy|       31|
| Justin|       20|
+-------+---------+
语法糖$
代码语言:javascript
AI代码解释
复制
package cn.bx.spark

import org.apache.spark.sql.{DataFrame, SparkSession}

object DataFrameApp {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().
      appName("DataFrameApp").
      master("local[*]").
      getOrCreate()
    val peopleDF: DataFrame = spark.read.json("resources/people.json")
    import spark.implicits._
    peopleDF.select($"name", $"age" + 1).show()
    spark.stop()
  }
}
filter

条件过滤

代码语言:javascript
AI代码解释
复制
package cn.bx.spark

import org.apache.spark.sql.{DataFrame, SparkSession}

object DataFrameApp {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().
      appName("DataFrameApp").
      master("local[*]").
      getOrCreate()
    val peopleDF: DataFrame = spark.read.json("resources/people.json")
    peopleDF.filter(peopleDF.col("age")>19).show()
    spark.stop()
  }
}

打印结果

代码语言:javascript
AI代码解释
复制
+---+----+
|age|name|
+---+----+
| 30|Andy|
+---+----+
groupBy
代码语言:javascript
AI代码解释
复制
package cn.bx.spark

import org.apache.spark.sql.{DataFrame, SparkSession}

object DataFrameApp {
  def main(args: Array[String]): Unit = {
    val spark: SparkSession = SparkSession.builder().
      appName("DataFrameApp").
      master("local[*]").
      getOrCreate()
    val peopleDF: DataFrame = spark.read.json("resources/people.json")
    peopleDF.groupBy(peopleDF.col("age")).count().show()
    spark.stop()
  }
}

打印结果

代码语言:javascript
AI代码解释
复制
+----+-----+
| age|count|
+----+-----+
|  19|    1|
|null|    1|
|  30|    1|
+----+-----+
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019.08.26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
RDD和DataFrame转换
在利用反射机制推断RDD模式时,需要首先定义一个case class,因为,只有case class才能被Spark隐式地转换为DataFrame。
羊羽shine
2019/08/23
1.4K0
Spark DataFrame基本操作
DataFrame的概念来自R/Pandas语言,不过R/Pandas只是runs on One Machine,DataFrame是分布式的,接口简单易用。 Threshold: Spark RDD API VS MapReduce API One Machine:R/Pandas 官网的说明 http://spark.apache.org/docs/2.1.0/sql-programming-guide.html#datasets-and-dataframes 拔粹如下: A Dataset is
sparkle123
2018/04/26
1.2K0
05-快速理解SparkSQL的DataSet
可从JVM对象构造Dataset,然后函数式转换(map、flatMap、filter等)操作。Dataset API在Scala和Java中可用。
JavaEdge
2024/05/26
1990
05-快速理解SparkSQL的DataSet
Spark SQL 快速入门系列(5) | 一文教你如何使用 IDEA 创建 SparkSQL 程序(小白入门!)
一. 添加 SparkSQL 依赖 <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.11</artifactId> <version>2.1.1</version> </dependency> 二. 具体代码 2.1 DataFrameDemo 1. 源码 package com.buwenbuhuo.spark.sql.day01 import org.apache.spark.
不温卜火
2020/10/28
1.4K0
Spark SQL 快速入门系列(5) | 一文教你如何使用 IDEA 创建 SparkSQL 程序(小白入门!)
Spark SQL 快速入门系列(7) | SparkSQL如何实现与多数据源交互
  Spark SQL 的DataFrame接口支持操作多种数据源. 一个 DataFrame类型的对象可以像 RDD 那样操作(比如各种转换), 也可以用来创建临时表.
不温卜火
2020/10/28
1.6K0
Spark SQL 快速入门系列(7) |  SparkSQL如何实现与多数据源交互
第三天:SparkSQL
Spark SQL是Spark用来处理结构化数据的一个模块,它提供了2个编程抽象:DataFrame和DataSet,并且作为分布式SQL查询引擎的作用。 我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduc的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所有Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!
sowhat1412
2020/11/05
14.7K0
第三天:SparkSQL
SparkSQL快速入门系列(6)
上一篇《SparkCore快速入门系列(5)》,下面给大家更新一篇SparkSQL入门级的讲解。
刘浩的BigDataPath
2021/04/13
2.7K0
SparkSQL快速入门系列(6)
Spark SQL 快速入门系列(2) | SparkSession与DataFrame的简单介绍
  在老的版本中,SparkSQL 提供两种 SQL 查询起始点:一个叫SQLContext,用于Spark 自己提供的 SQL 查询;一个叫 HiveContext,用于连接 Hive 的查询。
不温卜火
2020/10/28
2.6K0
Spark SQL 快速入门系列(2) | SparkSession与DataFrame的简单介绍
Spark SQL从入门到精通
熟悉spark sql的都知道,spark sql是从shark发展而来。Shark为了实现Hive兼容,在HQL方面重用了Hive中HQL的解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从MR作业替换成了Spark作业(辅以内存列式存储等各种和Hive关系不大的优化);
Spark学习技巧
2019/05/09
1.4K0
Spark SQL从入门到精通
慕课网Spark SQL日志分析 - 5.DateFrame&Dataset
DataFrame 不是Spark Sql提出的。而是在早起的Python、R、Pandas语言中就早就有了的。
Meet相识
2018/09/12
9080
慕课网Spark SQL日志分析 - 5.DateFrame&Dataset
Spark SQL实战(04)-API编程之DataFrame
Spark SQL中,SQLContext、HiveContext都是用来创建DataFrame和Dataset主要入口点,二者区别如下:
JavaEdge
2023/03/25
5.2K0
Spark SQL实战(04)-API编程之DataFrame
DataFrame与RDD的互操作
DataFrame Interoperating with RDDs 参考官网 http://spark.apache.org/docs/2.2.0/sql-programming-guide.html#interoperating-with-rdds DataFrame和RDD互操作的两种方式比较: 1)反射推导式:case class 前提:事先需要知道字段、字段类型 2)编程式:Row 如果第一种情况不能满足要求(事先不知道列等schema信息) 选型:优先考虑第一种,使用
sparkle123
2018/04/26
1.1K0
DataFrame与RDD的互操作
SparkSql学习笔记一
1.简介     Spark SQL是Spark用来处理结构化数据的一个模块,它提供了一个编程抽象叫做DataFrame并且作为分布式SQL查询引擎的作用。     为什么要学习Spark SQL?     我们已经学习了Hive,它是将Hive SQL转换成MapReduce然后提交到集群上执行,大大简化了编写MapReduce的程序的复杂性,由于MapReduce这种计算模型执行效率比较慢。所以Spark SQL的应运而生,它是将Spark SQL转换成RDD,然后提交到集群执行,执行效率非常快!同时Spark SQL也支持从Hive中读取数据。 2.特点     *容易整合     *统一的数据访问方式     *兼容Hive     *标准的数据连接 3.基本概念     *DataFrame         DataFrame(表) = schema(表结构) + Data(表结构,RDD)             就是一个表 是SparkSql 对结构化数据的抽象             DataFrame表现形式就是RDD         DataFrame是组织成命名列的数据集。它在概念上等同于关系数据库中的表,但在底层具有更丰富的优化。DataFrames可以从各种来源构建,         DataFrame多了数据的结构信息,即schema。         RDD是分布式的Java对象的集合。DataFrame是分布式的Row对象的集合。         DataFrame除了提供了比RDD更丰富的算子以外,更重要的特点是提升执行效率、减少数据读取以及执行计划的优化     *Datasets         Dataset是数据的分布式集合。Dataset是在Spark 1.6中添加的一个新接口,是DataFrame之上更高一级的抽象。它提供了RDD的优点(强类型化,使用强大的lambda函数的能力)以及Spark SQL优化后的执行引擎的优点。一个Dataset 可以从JVM对象构造,然后使用函数转换(map, flatMap,filter等)去操作。 Dataset API 支持Scala和Java。 Python不支持Dataset API。 4.创建表 DataFrame     方式一 使用case class 定义表         val df = studentRDD.toDF     方式二 使用SparkSession直接生成表         val df = session.createDataFrame(RowRDD,scheme)     方式三 直接读取一个带格式的文件(json文件)         spark.read.json("") 5.视图(虚表)     普通视图         df.createOrReplaceTempView("emp")             只对当前对话有作用     全局视图         df.createGlobalTempView("empG")             在全局(不同会话)有效             前缀:global_temp 6.操作表:     两种语言:SQL,DSL      spark.sql("select * from t ").show     df.select("name").show 
曼路
2018/10/18
1K0
spark2 sql读取数据源编程学习样例1
问题导读 1.dataframe如何保存格式为parquet的文件? 2.在读取csv文件中,如何设置第一行为字段名? 3.dataframe保存为表如何指定buckete数目? 作为一个开发人员
用户1410343
2018/03/26
1.8K0
spark2 sql读取数据源编程学习样例1
《SparkSql使用教程》--- 大数据系列
在Spark中,DataFrame是一种以RDD为基础的分布式数据据集,类似于传统数据库听二维表格,DataFrame带有Schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。
用户3467126
2019/07/03
1.1K0
Spark SQL 快速入门系列(6) | 一文教你如何自定义 SparkSQL 函数
强类型的Dataset和弱类型的DataFrame都提供了相关的聚合函数, 如 count(),countDistinct(),avg(),max(),min()。除此之外,用户可以设定自己的自定义聚合函数
不温卜火
2020/10/28
1.7K0
Spark SQL 快速入门系列(6) | 一文教你如何自定义 SparkSQL 函数
spark2 sql编程样例:sql操作
问题导读 1.DataFrame中本文使用了row哪些方法? 2.操作DataFrame row需要导入什么包? 3.teenagersDF.map(teenager => "Name: " + te
用户1410343
2018/03/26
3.6K0
spark2 sql编程样例:sql操作
Spark SQL | Spark,从入门到精通
欢迎阅读美图数据技术团队的「Spark,从入门到精通」系列文章,本系列文章将由浅入深为大家介绍 Spark,从框架入门到底层架构的实现,相信总有一种姿势适合你。
美图数据技术团队
2019/04/19
2.3K0
Spark SQL | Spark,从入门到精通
大数据技术Spark学习
Spark SQL 是 Spark 用来处理结构化数据的一个模块,它提供了一个编程抽象叫做 DataFrame,并且作为分布式 SQL 查询引擎的作用。 我们已经学习了 Hive,它是将 Hive SQL 转换成 MapReduce 然后提交到集群上执行,大大简化了编写 MapReduce 的程序的复杂性,由于 MapReduce 这种计算模型执行效率比较慢。所以 Spark SQL 的应运而生,它是将 Spark SQL 转换成 RDD,然后提交到集群执行,执行效率非常快!
黑泽君
2019/05/10
6K0
大数据技术Spark学习
BigData--大数据技术之SparkSQL
一、Spark SQL概述 1、DataFrame 与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrame API提供的是一套高层的关系操作,比函数式的RDD API要更加友好,门槛更低。 2、DataSet 1)是Dataframe API的一个扩展,是Sp
MiChong
2020/09/24
1.6K0
BigData--大数据技术之SparkSQL
推荐阅读
相关推荐
RDD和DataFrame转换
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
首页
学习
活动
专区
圈层
工具
MCP广场
首页
学习
活动
专区
圈层
工具
MCP广场