返回顶部
首页 > 资讯 > 精选 >DataFrame怎么用
  • 908
分享到

DataFrame怎么用

2023-06-02 21:06:57 908人浏览 泡泡鱼
摘要

这篇文章主要介绍DataFrame怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、概述:        DataFrame是一个

这篇文章主要介绍DataFrame怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

一、概述:

        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

<console>:1: error: unclosed string literal

df.select("name).show

          ^  

-- 年龄计算,NULL无法计算

scala> df.select($"name",$"age" + 1).show

+-------+---------+|   name|(age + 1)|+-------+---------+|Michael|     null||   Andy|       31|| Justin|       20|+-------+---------+

-- 年龄过滤

scala> df.filter($"age" > 21).show

+---+----+|age|name|+---+----+| 30|Andy|+---+----+

-- 年龄分组 汇总

scala> df.groupBy("age").count.show

+----+-----+                                                                    | age|count|+----+-----+|  19|    1||null|    1||  30|    1|+----+-----+

-- 创建一个临时视图

scala>  df.createOrReplaceTempView("people")

scala>spark.sql("select * from people").show

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

四、DataFrame对象上Action操作

-- 定义case class 用来创建Schema

case class Student(id:String,name:String,phone:String,Email:String)

-- RDD与DF反射方式实现

val students = sc.textFile("file:///home/hadoop/data/student.data").map(_.split("\\|")).map(x=>Student(x(0),x(1),x(2),x(3))).toDF()

-- 打印DF信息

students.printSchema

-- show(numRows: Int, truncate: Boolean) 

-- numRows截取前20行和truncate读取前20字符串

-- students.show(5,false) 读取前五行和所有字符串

scala> students.show

+---+--------+--------------+--------------------+| id|    name|         phone|               Email|+---+--------+--------------+--------------------+|  1|   Burke|1-300-746-8446|ullamcorper.velit...||  2|   Kamal|1-668-571-5046|pede.Suspendisse@...||  3|    Olga|1-956-311-1686|Aenean.eget.metus...||  4|   Belle|1-246-894-6340|vitae.aliquet.nec...||  5|  Trevor|1-300-527-4967|dapibus.id@acturp...||  6|  Laurel|1-691-379-9921|adipiscing@consec...||  7|    Sara|1-608-140-1995|Donec.nibh@enimEt...||  8|  Kaseem|1-881-586-2689|cursus.et.magna@e...||  9|     Lev|1-916-367-5608|Vivamus.nisi@ipsu...|| 10|    Maya|1-271-683-2698|accumsan.convalli...|| 11|     Emi|1-467-270-1337|est@nunc.com|.......|| 12|   Caleb|1-683-212-0896|Suspendisse@Quisq...|| 13|Florence|1-603-575-2444|sit.amet.dapibus@...|| 14|   Anika|1-856-828-7883|euismod@ligulaeli...|| 15|   Tarik|1-398-171-2268|turpis@felisorci.com|| 16|   Amena|1-878-250-3129|lorem.luctus.ut@s...|| 17| Blossom|1-154-406-9596|Nunc.commodo.auct...|| 18|     Guy|1-869-521-3230|senectus.et.netus...|| 19| Malachi|1-608-637-2772|Proin.mi.Aliquam@...|| 20|  Edward|1-711-710-6552|lectus@aliquetlib...|+---+--------+--------------+--------------------+only showing top 20 rows

-- students.head(5) 返回前几行数据

scala> students.head(5).foreach(println)[1,Burke,1-300-746-8446,ullamcorper.velit.in@ametnullaDonec.co.uk][2,Kamal,1-668-571-5046,pede.Suspendisse@interdumenim.edu][3,Olga,1-956-311-1686,Aenean.eget.metus@dictumcursusNunc.edu][4,Belle,1-246-894-6340,vitae.aliquet.nec@neque.co.uk][5,Trevor,1-300-527-4967,dapibus.id@acturpisegestas.net]

-- 查询具体字段

scala> students.select("id","name").show(5)+---+------+| id|  name|+---+------+|  1| Burke||  2| Kamal||  3|  Olga||  4| Belle||  5|Trevor|+---+------+

-- 修改字段取别名

scala> students.select($"name".as("new_name")).show(5)

+--------+|new_name|+--------+|   Burke||   Kamal||    Olga||   Belle||  Trevor|+--------+

--查询id大于五

scala> students.filter("id>5").show(5)

+---+------+--------------+--------------------+| id|  name|         phone|               Email|+---+------+--------------+--------------------+|  6|Laurel|1-691-379-9921|adipiscing@consec...||  7|  Sara|1-608-140-1995|Donec.nibh@enimEt...||  8|Kaseem|1-881-586-2689|cursus.et.magna@e...||  9|   Lev|1-916-367-5608|Vivamus.nisi@ipsu...|| 10|  Maya|1-271-683-2698|accumsan.convalli...|+---+------+--------------+--------------------+

-- 查询名称为空或者名称为NULL(filter=where)

scala> students.filter("name=''or name='NULL'").show(false)

+---+----+--------------+--------------------------+|id |name|phone         |Email                     |+---+----+--------------+--------------------------+|21 |    |1-711-710-6552|lectus@aliquetlibero.co.uk||22 |    |1-711-710-6552|lectus@aliquetlibero.co.uk||23 |NULL|1-711-710-6552|lectus@aliquetlibero.co.uk|+---+----+--------------+--------------------------+

-- 查询ID大于5且名称模糊查询 

scala> students.filter("id>5 and name like 'M%'").show(5)

+---+-------+--------------+--------------------+| id|   name|         phone|               Email|+---+-------+--------------+--------------------+| 10|   Maya|1-271-683-2698|accumsan.convalli...|| 19|Malachi|1-608-637-2772|Proin.mi.Aliquam@...|+---+-------+--------------+--------------------+

-- 按照名称升序排序且不等于空

scala> students.sort($"name").select("id","name").filter("name <> ''").show(3)

+---+-----+| id| name|+---+-----+| 16|Amena|| 14|Anika||  4|Belle|+---+-----+

-- 按照名称倒叙排序(sort = orderBy)

scala> students.sort($"name".desc).select("name").show(5)

+------+|  name|+------+|Trevor|| Tarik||  Sara||  Olga||  NULL|+------+

-- 年龄分组 汇总

scala> students.groupBy("age").count().show

+----+-----+                                                                    | age|count|+----+-----+|  19|    1||null|    1||  30|    1|+----+-----+

-- 聚合函数使用

scala> students.agg("id" -> "max", "id" -> "sum").show(false)

+-------+-------+|max(id)|sum(id)|+-------+-------+|9      |276.0  |+-------+-------+

-- join操作,using模式seq指定多个字段 

students.join(students2, Seq("id", "name"), "inner")

-- DataFrame的join操作有inner, outer, left_outer, right_outer, leftsemi类型

-- 指定类型,指定join的类型

students.join(students2 , students("id" ) === students2( "t1_id"), "inner")

五、DataFrame API实现文件操作

Maven依赖下载

<spark.version>2.3.1</spark.version><!-- 添加Spark Core的dependency --><dependency>  <groupId>org.apache.spark</groupId>  <artifactId>spark-core_2.11</artifactId>  <version>${spark.version}</version></dependency><!-- 添加Spark SQL的dependency --><dependency>  <groupId>org.apache.spark</groupId>  <artifactId>spark-sql_2.11</artifactId>  <version>${spark.version}</version></dependency>

idea实现方式:

package com.zrc.ruozedata.sparkSQLimport org.apache.spark.sql.types.{IntegerType, StringType, StructField, StructType}import org.apache.spark.sql.{Row, SparkSession}object SparkSQL001 extends App {            val spark = SparkSession.builder()      .master("local[2]")      .appName("SparkSQL001")      .getOrCreate() // 操作Hive添加      val  infos = spark.sparkContext.textFile("file:///F:/infos.txt")                   // 注意通过ROW获取的需要转换对应类型      val infoss = infos.map(_.split(",")).map(x=>Row(x(0).trim.toInt,x(1),x(2).trim.toInt))      val fields = StructType(            Array(                  StructField("id",IntegerType,true),                  StructField("name",StringType,true),                  StructField("age",IntegerType,true)            )      )      val schema = StructType(fields)      val infoDF = spark.createDataFrame(infoss,schema)      infoDF.show()      spark.stop()}// case class Info (id:Int,name:String,age:Int)

以上是“DataFrame怎么用”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注编程网精选频道!

--结束END--

本文标题: DataFrame怎么用

本文链接: https://lsjlt.com/news/231379.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • DataFrame怎么用
    这篇文章主要介绍DataFrame怎么用,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!一、概述:        DataFrame是一个...
    99+
    2023-06-02
  • python DataFrame的shift()方法怎么使用
    本篇内容主要讲解“python DataFrame的shift()方法怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“python DataFrame的shift()方...
    99+
    2023-06-29
  • 怎么使用Pandas.concat连接DataFrame和Series
    这篇文章主要介绍了怎么使用Pandas.concat连接DataFrame和Series的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Pandas.concat连接DataFrame和Series文章都...
    99+
    2023-07-05
  • Python中DataFrame中的xs怎么使用
    xs用于多重索引中,先创立一个二级行索引的dataframe,如下所示:np.arrays = [['one', 'one', 'one', 'two', 'two&#...
    99+
    2023-05-24
    Python dataframe
  • Python dataframe怎么设置index
    今天小编给大家分享一下Python dataframe怎么设置index的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下...
    99+
    2023-06-30
  • 怎么在python中使用join()合并DataFrame
    怎么在python中使用join()合并DataFrame?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。1、说明join方法提供了一个简便的方法用于将两个DataFrame...
    99+
    2023-06-15
  • python中怎么用dataframe函数新增行
    在Python中,可以使用DataFrame的`append()`方法来新增行。`append()`方法接受一个字典或Series对...
    99+
    2023-10-25
    python
  • python怎么修改Dataframe列名
    这篇文章将为大家详细讲解有关python怎么修改Dataframe列名,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python的五大特点是什么python的五大特点:1.简单易学,开发程序时,专注的是解...
    99+
    2023-06-14
  • 怎么在python中使用pandas模块查看DataFrame
    这篇文章将为大家详细讲解有关怎么在python中使用pandas模块查看DataFrame,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。1、首先加载pandas模块import p...
    99+
    2023-06-15
  • 怎么在python中将Array转换成DataFrame
    怎么在python中将Array转换成DataFrame?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python有哪些常用库python常用的库:1.requ...
    99+
    2023-06-14
  • 怎么在python中将series转换为dataframe
    这篇文章将为大家详细讲解有关怎么在python中将series转换为dataframe,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python是什么意思Python是一种跨平台的、具有解释...
    99+
    2023-06-14
  • 怎么在python中将dataframe转换为ndarray
    这篇文章将为大家详细讲解有关怎么在python中将dataframe转换为ndarray,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。python有哪些常用库python常用的库:1.req...
    99+
    2023-06-14
  • pandas Dataframe怎么实现批量修改值
    这篇文章主要介绍了pandas Dataframe怎么实现批量修改值的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇pandas Dataframe怎么实现批量修改值文章都会有所收获,下面我们...
    99+
    2023-07-02
  • pandas.DataFrame.from_dict怎么直接从字典构建DataFrame
    这篇文章主要介绍“pandas.DataFrame.from_dict怎么直接从字典构建DataFrame”,在日常操作中,相信很多人在pandas.DataFrame.from_dict怎么直接从字典构建DataFrame问题上存在疑惑,...
    99+
    2023-07-02
  • 怎么用python dataframe统计行列中零值的个数
    今天小编给大家分享一下怎么用python dataframe统计行列中零值的个数的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来...
    99+
    2023-06-29
  • python DataFrame中stack()方法、unstack()方法和pivot()方法怎么用
    这篇文章主要讲解了“python DataFrame中stack()方法、unstack()方法和pivot()方法怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python...
    99+
    2023-06-29
  • python中DataFrame数据合并merge()和concat()方法怎么用
    这篇文章主要讲解了“python中DataFrame数据合并merge()和concat()方法怎么用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“python中DataFrame...
    99+
    2023-07-02
  • 怎么在python中实现按列排序DataFrame
    怎么在python中实现按列排序DataFrame?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python是什么意思Python是一种跨平台的、具有解释性、编译性、互动性...
    99+
    2023-06-14
  • 怎么在python中实现按行遍历Dataframe
    怎么在python中实现按行遍历Dataframe?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。Python的优点有哪些1、简单易用,与C/C++、Java、C# 等传统语言相...
    99+
    2023-06-14
  • 怎么在python中将字典转换为DataFrame
    怎么在python中将字典转换为DataFrame?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。python可以做什么Python是一种编程语言,内置了许多有效的工具,Pyth...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作