热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Spark(六):DataFrame

文章目录说明分享记录特性接口一般处理流程优点缺点代码实例spark与RDD对比总结说明由于某些原因,上周五未发布博客未,本文补上。DataFrame是一


文章目录

  • 说明
  • 分享
  • 记录
    • 特性
    • 接口
    • 一般处理流程
    • 优点
    • 缺点
  • 代码实例
  • spark与RDD对比
  • 总结


说明


由于某些原因,上周五未发布博客未,本文补上。
DataFrame是一种spark 1.3版本提供Spark SQL接口下的分布式数据集,继承自DataSet数据集,该概念最早由R语言和Pandas库(Python)提出。
DataFrame更像传统数据库里的表,除了数据外还包含更多的辅助信息,如列名、列值和列的属性,同时支持一些复杂的数据格式。从API应用的角度,DataFrame提供的API层次更高,比RDD编程方便,学习的门槛更低。



分享


  • 大数据博客列表

记录


特性


  1. DataFrame会将数据分割成列,并为每列取名,概念上等同于关系型数据库中表或R、Python中的数据框。

  2. 可以处理结构化和非结构化数据格式。例如Avro、CSV、弹性搜索和Cassandra。它还处理存储系统HDFS、HIVE表、MySQL等。

  3. Catalyst的通用树转换框架分为四个阶段,如下所示:

    • 分析解决引用的逻辑计划
    • 逻辑计划优化,
    • 物理计划
    • 代码生成用于编译部分查询生成Java字节码。
      在这里插入图片描述

在物理规划阶段,Catalyst可能会生成多个计划并根据成本进行比较。 所有其他阶段完全是基于规则的。 每个阶段使用不同类型的树节点; Catalyst包括用于表达式、数据类型以及逻辑和物理运算符的节点库。 这些阶段如下所示:


接口


  • DataFrame API支持Scala、java、python、R,它作为行数据集,在Scala API中DataFrame是DataSet[Row]的类型别名,Java中使用数据集表示。
  • SparkSession是所有Spark功能入口,应用程序通过它能从现存RDD或Hive Table、Spark数据源中创建DataFram。Spark SQL能对多种数据源使用DataFrame接口,使用SparkSQL DataFrame创建临时视图,然后执行Sql查询。

一般处理流程


  1. 先创建Spark基础变量,spark,sc
  2. 加载数据,rdd.textFile,spark.read.csv/json等
  3. 数据处理,mapPartition, map,filter,reduce等一系列transformation操作
  4. 数据保存,saveAstextFile,或者其他DataFrame方法

优点

DataFrame优于RDD,因为它提供了内存管理和优化执行计划:


  1. 自定义内存管理,当数据以二进制格式存储在堆外内存时,将节省大量内存,除此之外,没有垃圾回收(GC)开销。同时避免了昂贵的java序列化,因为数据以二进制格式存储,且已知内存schema。
  2. 优化执行计划:也称为查询优化器,查询执行时,创建一个优化的执行计划,并将计划运行在RDD上。

缺点


  1. Spark SQL DataFrame API不支持编译时类型安全,如果结构未知,不能操作数据。
  2. 一旦将域对象转化为DataFrame,域对象不能重构。

代码实例

java代码创建简单DataFrame,JSON格式RDD创建DataFrame:

SparkConf conf = new SparkConf();
conf.setMaster("local").setAppName("jsonRDD"); //主机地址和应用名
JavaSparkContext sc = new JavaSparkContext(conf);
SQLContext sqlContext = new SQLContext(sc);
JavaRDD<String> nameRDD &#61; sc.parallelize(Arrays.asList("{\"name\":\"zhangsan\",\"age\":\"18\"}","{\"name\":\"lisi\",\"age\":\"19\"}","{\"name\":\"wangwu\",\"age\":\"20\"}"
));
JavaRDD<String> scoreRDD &#61; sc.parallelize(Arrays.asList(
"{\"name\":\"zhangsan\",\"score\":\"100\"}",
"{\"name\":\"lisi\",\"score\":\"200\"}",
"{\"name\":\"wangwu\",\"score\":\"300\"}"
));DataFrame namedf &#61; sqlContext.read().json(nameRDD); //RDD转换DataFrame
DataFrame scoredf &#61; sqlContext.read().json(scoreRDD); //RDD转换DataFrame
namedf.registerTempTable("name"); //注册临时表
scoredf.registerTempTable("score");DataFrame result &#61; sqlContext.sql("select name.name,name.age,score.score from name,score where name.name &#61; score.name"); //sql查询
result.show();sc.stop();

spark与RDD对比

DataFrame与RDD类似&#xff0c;但DataFrame更像传统数据库的二维表格&#xff0c;除了数据以外&#xff0c;还掌握数据的结构信息&#xff0c;即schema。同时&#xff0c;与Hive类似&#xff0c;DataFrame也支持嵌套数据类型&#xff08;struct、array和map&#xff09;。
在这里插入图片描述


总结

spark DataFrame本质是将数据映射为表&#xff0c;在此基础上完成sql方式业务功能开发。


推荐阅读
  • 本文介绍了在使用Python中的aiohttp模块模拟服务器时出现的连接失败问题,并提供了相应的解决方法。文章中详细说明了出错的代码以及相关的软件版本和环境信息,同时也提到了相关的警告信息和函数的替代方案。通过阅读本文,读者可以了解到如何解决Python连接服务器失败的问题,并对aiohttp模块有更深入的了解。 ... [详细]
  • GetWindowLong函数
    今天在看一个代码里头写了GetWindowLong(hwnd,0),我当时就有点费解,靠,上网搜索函数原型说明,死活找不到第 ... [详细]
  • Postgresql备份和恢复的方法及命令行操作步骤
    本文介绍了使用Postgresql进行备份和恢复的方法及命令行操作步骤。通过使用pg_dump命令进行备份,pg_restore命令进行恢复,并设置-h localhost选项,可以完成数据的备份和恢复操作。此外,本文还提供了参考链接以获取更多详细信息。 ... [详细]
  • 如何在mysqlshell命令中执行sql命令行本文介绍MySQL8.0shell子模块Util的两个导入特性importTableimport_table(JS和python版本 ... [详细]
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • mysql-cluster集群sql节点高可用keepalived的故障处理过程
    本文描述了mysql-cluster集群sql节点高可用keepalived的故障处理过程,包括故障发生时间、故障描述、故障分析等内容。根据keepalived的日志分析,发现bogus VRRP packet received on eth0 !!!等错误信息,进而导致vip地址失效,使得mysql-cluster的api无法访问。针对这个问题,本文提供了相应的解决方案。 ... [详细]
  • ubuntu用sqoop将数据从hive导入mysql时,命令: ... [详细]
  • 本文总结了使用不同方式生成 Dataframe 的方法,包括通过CSV文件、Excel文件、python dictionary、List of tuples和List of dictionary。同时介绍了一些注意事项,如使用绝对路径引入文件和安装xlrd包来读取Excel文件。 ... [详细]
  • python3 nmap函数简介及使用方法
    本文介绍了python3 nmap函数的简介及使用方法,python-nmap是一个使用nmap进行端口扫描的python库,它可以生成nmap扫描报告,并帮助系统管理员进行自动化扫描任务和生成报告。同时,它也支持nmap脚本输出。文章详细介绍了python-nmap的几个py文件的功能和用途,包括__init__.py、nmap.py和test.py。__init__.py主要导入基本信息,nmap.py用于调用nmap的功能进行扫描,test.py用于测试是否可以利用nmap的扫描功能。 ... [详细]
  • 本文介绍了Hive常用命令及其用途,包括列出数据表、显示表字段信息、进入数据库、执行select操作、导出数据到csv文件等。同时还涉及了在AndroidManifest.xml中获取meta-data的value值的方法。 ... [详细]
  • 基于词向量计算文本相似度1.测试数据:链接:https:pan.baidu.coms1fXJjcujAmAwTfsuTg2CbWA提取码:f4vx2.实验代码:imp ... [详细]
author-avatar
dongquchunlaizv_123
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有