Spark SQL(四)之DataSet与RDD转换

一、创建DataSet

DataSet与RDD相似,但是,它们不使用Java序列化或Kryo,而是使用专用的Encoder对对象进行序列化以进行网络处理或传输。虽然编码器和标准序列化都负责将对象转换为字节,但是编码器是动态生成的代码,并使用一种格式,该格式允许Spark执行许多操作,例如过滤,排序和哈希处理,而无需将字节反序列化回对象。

Encoder<Man> manEncoder = Encoders.bean(Man.class);
Dataset<Man> manDS = spark.createDataset(Collections.singletonList(man),manEncoder 
);Encoder<String> strEncoder = Encoders.STRING();
Dataset<String> strDS = spark.createDataset(Arrays.asList("a", "b", "c"), strEncoder);

 

二、RDD转DataSet

Spark SQL支持两种将现有RDD转换为数据集的方法。第一种方法使用反射来推断包含特定对象类型的RDD的架构。这种基于反射的方法可以使代码更简洁,并且在编写Spark应用程序时已经了解架构时可以很好地工作。

创建数据集的第二种方法是通过编程界面,该界面允许您构造模式,然后将其应用于现有的RDD。尽管此方法较为冗长,但可以在运行时才知道列及其类型的情况下构造数据集。

(1)使用反射推断表的模式

Spark SQL支持自动将JavaBean的RDD 转换为DataFrame,使用反射得到Bean信息,定义了表的模式。Spark SQL不支持包含Map字段的JavaBean 。 不过,支持嵌套JavaBean和List或Array字段。

可以通过创建一个实现Serializable并为其所有字段具有getter和setter的类来创建JavaBean。

JavaRDD<Man> manRDD = spark.read().textFile("/test.txt").javaRDD().map(line -> {String[] splits = line.split(",");Man man = new Man();man.setName(splits[0]);man.setDesc(splits[1]);return man;});Dataset<Row> manDF = spark.createDataFrame(manRDD, Man.class);

 (2)以编程方式指定架构

当无法提前定义JavaBean类时(例如,记录的结构编码为字符串,或者将解析文本数据集,并且为不同的用户设计不同的字段),Dataset<Row>可以通过三个步骤以编程方式创建a 。

  1. Row从原始RDD创建一个的RDD;
  2. 在第1步中创建的RDD中创建StructTypeRows的结构匹配 表示的模式。
  3. Row通过通过createDataFrame提供的方法将架构应用于的RDD SparkSession
JavaRDD<String> manRDD = ...
String cols = "name,desc";
List<StructField> fields = new LinkedList<>();
for (String fieldName : cols.split(",")) {StructField field = DataTypes.createStructField(fieldName, DataTypes.StringType, true);fields.add(field);
}
StructType schema = DataTypes.createStructType(fields);
JavaRDD<Row> rowRDD = manRDD.map((Function<String, Row>) record -> {String[] splits = record.split(",");return RowFactory.create(splits[0], splits[1].trim());
});Dataset<Row> manDataFrame = spark.createDataFrame(rowRDD, schema);

 

三、DataSet转RDD

 toJavaRDD方法直接将DataSet转RDD

JavaRDD<Row> javaRDD = df.toJavaRDD();

 

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

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

相关文章

P3389-[模板]高斯消元法

正题 题目链接:https://www.luogu.org/problem/P3389 题目大意 给出一个nnn元一次方程组&#xff0c;求解。 解题思路 模板&#xff0c;有什么好说的吗 codecodecode #include<cstdio> #include<cstring> #include<algorithm> #include<cmath> usi…

【ASP.NET Core】处理异常

依照老周的良好作风&#xff0c;开始之前先说点题外话。前面的博文中&#xff0c;老周介绍过自定义 MVC 视图的搜索路径&#xff0c;即向 ViewLocationFormats 列表添加相应的内容&#xff0c;其实&#xff0c;对 Razor Page 模型&#xff0c;也可以向 PageViewLocationFormats…

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

一、数据加载 &#xff08;1&#xff09;默认数据源&#xff08;parquet&#xff09; 最简单加载数据的方式&#xff0c;所有操作都使用默认数据源&#xff08;parquet&#xff09;。如果指定默认数据源需要配置 spark.sql.sources.default参数。 Dataset<Row> manDF …

树莓派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; 安庭庭 张浩 视高…