Spark SQL(五)之数据加载与存储

一、数据加载

(1)默认数据源(parquet)

最简单加载数据的方式,所有操作都使用默认数据源(parquet)。如果指定默认数据源需要配置 spark.sql.sources.default参数。

Dataset<Row> manDF = spark.read().load("hdfs://master:9000/test.parquet");
manDF.select("name", "desc").write().save("hdfs://master:9000/test1.parquet");

(2)手动指定选项

可以手动指定将要使用的数据源以及要传递给数据源的任何其他选项。数据源通过其全名指定(即org.apache.spark.sql.parquet),但内置的来源。

也可以使用自己的短名称(jsonparquetjdbcorclibsvmcsvtext)。从任何数据源类型加载的DataFrame都可以使用此语法转换为其他类型。

请参阅API文档以获取内置源的可用选项,例如 org.apache.spark.sql.DataFrameReaderorg.apache.spark.sql.DataFrameWriter。此处记录的选项也应通过非Scala Spark API(例如PySpark)应用。

Dataset<Row> manDF = spark.read().format("json").load("hdfs://master:9000/test.json");
manDF.select("name", "desc").write().format("parquet").save("hdfs://master:9000/test1.parquet");

 (3)加载CSV文件

Dataset<Row> manDF = spark.read().format("csv").option("sep", ";").option("inferSchema", "true").option("header", "true").load("hdfs://master:9000/test.csv");

(4)写操作期使用额外的option

控制ORC数据源的Bloom过滤器和字典编码,以下ORC示例将创建Bloom过滤器,并仅将字典编码用于age。对于parquet,也存在parquet.enable.dictionary。要查找有关其他ORC / Parquet选项的更多详细信息,请访问Apache ORC / Parquet官方网站。

manDF.write.format("orc").option("orc.bloom.filter.columns", "age").option("orc.dictionary.key.threshold", "1.0").option("orc.column.encoding.direct", "name").save("hdfs://master:9000/man.orc")

 

二、保存模式

保存操作可以选择带SaveMode,指定如何处理现有数据(如果存在)。重要的是要认识到这些保存模式不使用任何锁定,也不是原子的。另外,执行时Overwrite,将在写出新数据之前删除数据。

Scala / Java任何语言意义
SaveMode.ErrorIfExists (默认)"error" or "errorifexists" (默认)将DataFrame保存到数据源时,如果已经存在数据,则将引发异常。
SaveMode.Append"append"将DataFrame保存到数据源时,如果已经存在数据/表,则应该将DataFrame的内容附加到现有数据中。
SaveMode.Overwrite"overwrite"覆盖模式意味着将DataFrame保存到数据源时,如果已经存在数据/表,则预期现有数据将被DataFrame的内容覆盖。
SaveMode.Ignore"ignore"忽略模式意味着在将DataFrame保存到数据源时,如果已经存在数据,则期望保存操作不保存DataFrame的内容并且不更改现有数据。这类似于CREATE TABLE IF NOT EXISTSSQL中的。

保存到永久表

DataFrames也可以使用以下saveAsTable 命令作为持久性表保存到Hive Metastore中。请注意,使用此功能不需要现有的Hive部署。Spark将为您创建一个默认的本地Hive Metastore(使用Derby)。与createOrReplaceTempView命令不同, saveAsTable它将具体化DataFrame的内容并在Hive元存储中创建一个指向数据的指针。即使您重新启动Spark程序,持久表仍将存在,只要您保持与同一metastore的连接即可。可以通过使用表名称table在上调用方法来创建持久表的DataFrame SparkSession

对于基于文件的数据源,例如文本,镶木地板,json等,您可以通过path选项指定自定义表路径 ,例如df.write.option("path", "/some/path").saveAsTable("t")。删除表后,自定义表路径将不会删除,并且表数据仍然存在。如果未指定自定义表路径,Spark会将数据写入仓库目录下的默认表路径。删除表时,默认表路径也将被删除。

从Spark 2.1开始,持久数据源表在Hive元存储中存储了按分区的元数据。这带来了几个好处:

  • 由于元存储只能返回查询的必要分区,因此不再需要在第一个查询中将所有分区发现到表中。
  • Hive DDL(例如,ALTER TABLE PARTITION ... SET LOCATION现在可用于使用Datasource API创建的表)。

请注意,在创建外部数据源表(带有path选项的表)时,默认情况下不会收集分区信息。要同步元存储中的分区信息,可以调用MSCK REPAIR TABLE

 

三、分组,分类和分区

对于基于文件的数据源,也可以对输出进行存储和分类或分区。

(1)桶和排序

存储桶和排序仅适用于持久表

cityDF.write().bucketBy(10, "city").sortBy("area").saveAsTable("city_buckets");

(2)分区

而分区可以既使用savesaveAsTable使用DataSet API时

manDF.write().partitionBy("age").format("json").save("hdfs://master:9000/man.json");

(3)分区和桶

对表使用分区和存储桶

manDF.write().partitionBy("age").bucketBy(18, "name").saveAsTable("man_partition_buckets")

partitionBy创建一个分区结构描述“分区发现”部分,它对具有高聚集数的列适用性有限。相反, bucketBy将数据分布在固定数量的存储桶中,在唯一值的数量不受限制时可以使用。

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/322046.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

树莓派3B上部署运行.net core 2程序

针对Linxu arm处理器如何部署.net core 2的资料很少&#xff0c;网上找到几篇但都写得不够详细&#xff0c;按照他们教程来撞墙了&#xff0c;折磨了几天终于部署成功了&#xff0c;先上一张运行成功的图1.windows系统中&#xff0c;在项目的目录下使用CMD命令运行进行发布dotn…

bzoj3143,P3232-[Hnoi2013]游走【数学期望,高斯消元,贪心】

正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id3143 https://www.luogu.org/problem/P3232 题目大意 一张无向图nnn个点mmm条边&#xff0c;然后给每条边附上1∼m1\sim m1∼m的权值(不能重复)&#xff0c;求1走到nnn的最小期望值。 解题思路 我们可以计…

Spark SQL(六)之加载数据的参数配置

一、配置 忽略损坏的文件、忽略丢失的文件、路径全局过滤器、递归文件查找和修改时间路径过滤器等选项/配置仅在使用基于文件的源&#xff08;parquet&#xff0c;orc&#xff0c;avro&#xff0c;json&#xff0c;csv&#xff0c;txt&#xff09;时才有效。 以下示例中使用的…

bzoj1013,luogu4035-[JSOI2008]球形空间产生器【高斯消元】

正题 题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id3534 https://www.luogu.org/problem/P4035 题目大意 一个nnn维平面的元&#xff0c;给出圆表面上的n1n1n1个坐标&#xff0c;求圆心位置。 解题思路 对于圆心的第iii维位置xix_ixi​有∑j0n(ai,j−xi)2C\…

拥抱.NET Core系列:MemoryCache 初识

MSCache能做什么&#xff1f;绝对过期支持滑动过期支持&#xff08;指定一个时间&#xff0c;TimeSpan&#xff0c;指定时间内有被Get缓存时间则顺延&#xff0c;否则过期&#xff09;过期回调自定义过期MSCache目前最新的正式版是 2.0.0&#xff0c;预览版是2.1.0&#xff0c;…

Spark Structure Streaming(一)之简介

一、Structure Streaming 结构化流是基于Spark SQL引擎构建的可伸缩且容错的流处理引擎。可以像对静态数据进行批处理计算一样&#xff0c;来表示流计算。 当流数据继续到达时&#xff0c;Spark SQL引擎将负责递增地&#xff0c;连续地运行它并更新最终结果。可以在Scala&…

Ocelot中使用Butterfly实践

Ocelot(https://github.com/TomPallister/Ocelot)是一个用.net core实现的API网关&#xff0c;Butterfly(https://github.com/ButterflyAPM/butterfly)是用.net core实现的全程序跟踪&#xff0c;现在&#xff0c;Ocelot中可以使用Butterfly了&#xff0c;关于Ocelot和Butterfl…

jzoj6290-倾斜的线【计算几何,贪心】

正题 题目大意 有nnn个点&#xff0c;将两个点连成线&#xff0c;求斜率最接近PQ\frac{P}{Q}QP​的线。 解题思路 我们有一个结论&#xff1a;若我们对于每一个点做一条斜率为PQ\frac{P}{Q}QP​的线&#xff0c;然后按截距排序&#xff0c;然后答案必定是相邻的点。 证明: 我…

Java 平台调试架构JPDA

转载自 Java-JPDA 概述 JPDA&#xff1a;Java 平台调试架构&#xff08;Java Platform Debugger Architecture&#xff09; 它是 Java 虚拟机为调试和监控虚拟机专门提供的一套接口。 一、JPDA https://docs.oracle.com/javase/8/docs/technotes/guides/jpda/ JPDA 由三个…

jzoj6305-最小值【线段树,dp,双端链表】

正题 题目大意 定义函数f(x)Ax3Bx2CxDf(x)Ax^3Bx^2CxDf(x)Ax3Bx2CxD 然后给出一个序列&#xff0c;要求按顺序分成若干段。对于一段[L..R][L..R][L..R]&#xff0c;贡献为f(min{ai}(i∈[L..R]))f(min\{a_i\}(i\in[L..R]))f(min{ai​}(i∈[L..R])) 然后要求所有段的贡献之和最大…

Ocelot + Consul实践

关于Consul(https://www.consul.io)是一个分布式&#xff0c;高可用,支持多数据中心的服务发现和配置共享的服务软件,由 HashiCorp 公司用 Go 语言开发, 基于 Mozilla Public License 2.0 的协议进行开源。 在Consul的文档上&#xff0c;Consul 支持Service Discovery, Health …

Arthas - 开源 Java 诊断工具

转载自 Arthas使用 Authas — 开源的java诊断工具 下载安装 authas是一个jar包&#xff0c;可以直接下载后运行 wget https://alibaba.github.io/arthas/arthas-boot.jarjava -jar arthas-boot.jar就可以启动起来。启动后&#xff0c;authas会自动检测存在的java进程&…

jzoj6307-安排【归并排序】

正题 题目大意 一个目前序列&#xff0c;一个目标序列&#xff0c;每次可以选择一个区间交换区间最大值和最小值。 询问在345678345678345678步内将目前序列转换回目标序列的方案(输出该方案)。 解题思路 我们考虑归并排序&#xff0c;对于两个升序的序列&#xff0c;我们考…

.NET Core 2.1 Preview 1发布:更快的构建性能

今天&#xff0c;我们宣布发布 .NET Core 2.1 Preview 1。这是 .NET Core 2.1 的第一个公开发布。我们有很大的改进希望分享出来&#xff0c;并且渴望得到您的反馈意见&#xff0c;无论是在评论中还是在github中dotnet/core #1297ASP.NET Core 2.1 Preview 1 和 Entity Framewo…

Spark SQL(七)之基于用户的相似度公式

一、基于用户的Jaccard相似度公式 其中&#xff0c;u、v表示任意两个用户&#xff0c;N(u)表示用户u喜欢的物品集合,N(v)表示用户v喜欢物品的集合。 代码 public class UserCFApp {public static void main(String[]args){SparkConf sparkConf new SparkConf();sparkConf.se…

欢乐纪中A组赛【2019.8.17】

前言 前几天题目没改完(好难QvQQvQQvQ)&#xff0c;然后这几天ZZYZZYZZY和WHFWHFWHF去广州二中了 然后我是菜鸡&#xff0c;今天暴力写挂了QAQQAQQAQ&#xff0c;T2T2T2少判断了个东西少了808080 成绩 懒得写只放自己的了(反正垫底) Rank51,20ptsRank51,20ptsRank51,20pts 正…

BXUG第11期活动

分享主题&#xff1a;Xamarin Azure 微软云加端移动应用技术架构分享者&#xff1a;周岳 微软MVP分享主题&#xff1a;从设计图到最终界面- Xamarin跨平台界面最佳实践分享者: 程文锋 视高盛景分享主题&#xff1a;基于VSTS的App DevOps分享者&#xff1a; 安庭庭 张浩 视高…

Spark SQL(八)之基于物品的相似度公式

一、基于物品的Jaccard相似度公式 其中&#xff0c;i、j表示任意两个物品&#xff0c;N(i)表示喜欢物品i的用户数&#xff0c;N(j)表示喜欢物品j的用户数。 代码&#xff1a; public class ItemCFApp {public static void main(String[]args){SparkConf sparkConf new Spark…

CF1200D-White Lines【二维前缀和】

正题 题目链接:https://www.luogu.org/problem/CF1200D 题目大意 一个黑白组成的n∗nn*nn∗n矩阵&#xff0c;然后可以选择将k∗kk*kk∗k的覆盖为白色&#xff0c;然后求有多少白线(整行或整列都是白色)。 解题思路 对于每一行或每一列可以变成白线的话那么可行范围一定是一…

ASP.NET CORE MVC 实现减号分隔(Kebab case)样式的 URL

ASP.NET CORE MVC 中&#xff0c;默认的 Route 模板是&#xff1a; /{controller}/{action} 。我们可以通过开启 URL 小写转换将 URL 变为小写&#xff0c;但此方式在 Controller 或者 Action 为一个词组时&#xff0c;生成的 URL 并不友好。假设我们有 UserController 和 Add…