首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark 如何使用DataSets

DataSets 继承了编译类型安全性的好处 - 这意味着线上应用程序可以在运行之前检查错误。它们还允许直接对用户自定义的类操作。...DataSets 可以与现有的 RDD API 一起使用,但是当数据可以用结构化的形式表示,可以提高效率。Spark 1.6 首次提出了 Datasets,我们期望未来的版本中改进它们。 1....编译器和IDE懂得你正在使用的类型,并且可以在你构建数据管道提供有用的提示和错误信息。 虽然这个高层次代码语法上看起来类似,但使用 Datasets,你也可以访问完整关系执行引擎的所有功能。...由于 Spark 了解 Datasets 中数据的结构,因此可以缓存 Datasets 在内存中创建更优化的布局。...(s => s"${s.name} is ${2015 – s.yearFounded} years old") Encoder 检查你的数据与预期的模式是否匹配,尝试错误地处理TB大小数据之前提供有用的错误消息

3K30
您找到你想要的搜索结果了吗?
是的
没有找到

Spark系列 - (3) Spark SQL

3.2.1 三者的共性 都是分布式弹性数据集,为处理超大型数据提供便利; 都是Lasy的,进行创建、转换,如map方法,不会立即执行,只有遇到Action如foreach,三者才会开始遍历运算,...DataFrame编译器缺少类型安全检查。...如果使用DataFrame,你也就是说,当你 DataFrame 中调用了 API 之外的函数编译器就可以发现这个错。...但如果此时,使用了一个不存在字段的名字,则只能到运行时才能发现错误; 如果用的是DataSet[Person],所有不匹配的类型参数都可以在编译发现; 3.2.4 什么时候使用DataFrame或DataSet...,如 filter、map、aggregation、 average、sum、SQL 查询、列式访问或使用 lambda 函数,那就使用 DataFrame 或 Dataset; 如果你想在编译就有高度的类型安全

32110

第三天:SparkSQL

通过反射确定(需要用到样例类) 创建一个样例类 scala> case class People(name:String, age:Int) 根据样例类将RDD转换为DataFrame scala>...[name: string, age: int] DataFrame换为RDD 直接调用rdd即可 创建一个DataFrame scala> val df = spark.read.json("/...DataFrame与DataSet的互操作 DataFrameDataSet 创建一个DateFrame scala> val df = spark.read.json("examples/src/main...使用一些特殊的操作,一定要加上import spark.implicits._不然toDF、toDS无法使用。 RDD、DataFrame、DataSet ?...相同点 RDD、DataFrame、DataSet全部都是平台下到分布式弹性数据集,为处理超大型数据提供了便利 三者都有惰性机制,创建,转换,如map方法时候不会立即执行,只有遇到了Action算子比如

13.1K10

《从0到1学习Spark》-- 初识Spark SQL

Shark是Hive的代码库上构建的,使用Hive查询编译器来解析Hive查询并生成的抽象的语法树,它会转换为一个具有某些基本优化的逻辑计划。...这样Shark就能让Hive查询具有了内存级别的性能,但是Shark有三个问题需要处理: 1、Shark只适合查询Hive表,它无法咋RDD上进行关系查询 2、Spark程序中将Hive Sql作为字符串运行很容易出错...同时还提供了java、scala、python和R支持的Dataset Api和DataFrame Api。...创建DataFrame或DataSet后,就可以额在任何库中使用他们呢,他们可互操作,也可以转换为传统的RDD。...SQL可以通过JDBC、ODBC或命令行在java、scala、python和R语言中使用。当在编程语言中使用SQL,结果会转换为DataFrame

75820

RDD转换为DataFrame

这种基于反射的方式,代码比较简洁,当你已经知道你的RDD的元数据,是一种非常不错的方式。...第二种方式,是通过编程接口来创建DataFrame,你可以程序运行时动态构建一份元数据,然后将其应用到已经存在的RDD上。...版本:而Scala由于其具有隐式转换的特性,所以Spark SQL的Scala接口,是支持自动将包含了case class的RDD转换为DataFrame的。...中,对row的使用,比java中的row的使用,更加丰富 // scala中,可以用row的getAs()方法,获取指定列名的列 teenagerRDD.map { row => Student(row.getAs...Integer的一个类型转换的错误 ​​// 就说明什么,说明有个数据,给定义成了String类型,结果使用的时候,要用Integer类型来使用 ​​// 而且,错误sql相关的代码中 ​​// 所以

73520

编程修炼 | Scala亮瞎Java的眼(二)

通常而言,OOFP会显得相对困难,这是两种根本不同的思维范式。张无忌学太极剑,学会的是忘记,只取其神,我们学FP,还得尝试忘记OO。自然,学到后来,其实还是万法归一。...10))) 然后将这个类型转换为一个Map。...转换,通过foldLeft操作对前面List中tuple的Int值累加,所以得到的结果为: scala.collection.immutable.Map[String,Int] = Map(scala...由于Scala2.10版本中将原有的Actor取消,转而使用AKKA,所以我在演讲中并没有提及Actor。这是另外一个大的话题。...JVM的编译与纯粹的静态编译不同,Java和Scala编译器都是将源代码转换为JVM字节码,而在运行时,JVM会根据当前运行机器的硬件架构,将JVM字节码转换为机器码。

1.4K50

spark 数据处理 -- 数据采样【随机抽样、分层抽样、权重抽样】

: Map[T, Double], seed: Long): DataFrame Returns a stratified sample without replacement based on the...rdd2=testDS.rdd RDD DataFrame: // 一般用元组把一行的数据写在一起,然后toDF中指定字段名 import spark.implicits._ val testDF...= rdd.map {line=> (line._1,line._2) }.toDF(“col1”,“col2”) RDD Dataet: // 核心就是要定义case class import...import spark.implicits._ case class Coltest … … val testDS = testDF.as[Coltest] 特别注意: 使用一些特殊操作,一定要加上...import spark.implicits._ 不然toDF、toDS无法使用 今天学习了一招,发现DataFrame换为DataSet 时候比较讨厌,居然需要动态写个case class 其实不需要

5.8K10

Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))

是什么及案例演示 Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。...当RDD中数据类型CaseClass样例类,通过反射Reflecttion获取属性名称和类型,构建Schema,应用到RDD数据集,将其转换为DataFrame。...原因:SparkSQL中当Job中产生Shuffle,默认的分区数(spark.sql.shuffle.partitions )为200,实际项目中要合理的设置。...构建SparkSession实例对象,设置参数的值 好消息:Spark3.0开始,不用关心参数值,程序自动依据Shuffle时数据量,合理设置分区数目。...无论是DSL编程还是SQL编程,性能一模一样,底层转换为RDD操作,都是一样的:Catalyst 17-[掌握]-电影评分数据分析之保存结果至MySQL 将分析数据保持到MySQL表中,直接调用

2.5K50

Note_Spark_Day07:Spark SQL(DataFrame是什么和数据分析(案例讲解))

是什么及案例演示 Spark中,DataFrame是一种以RDD为基础的分布式数据集,类似于传统数据库中的二维表格。...当RDD中数据类型CaseClass样例类,通过反射Reflecttion获取属性名称和类型,构建Schema,应用到RDD数据集,将其转换为DataFrame。...原因:SparkSQL中当Job中产生Shuffle,默认的分区数(spark.sql.shuffle.partitions )为200,实际项目中要合理的设置。...构建SparkSession实例对象,设置参数的值 好消息:Spark3.0开始,不用关心参数值,程序自动依据Shuffle时数据量,合理设置分区数目。...无论是DSL编程还是SQL编程,性能一模一样,底层转换为RDD操作,都是一样的:Catalyst 17-[掌握]-电影评分数据分析之保存结果至MySQL 将分析数据保持到MySQL表中,直接调用

2.2K40

Spark MLlib特征处理 之 StringIndexer、IndexToString使用说明以及源码剖析

最近在用Spark MLlib进行特征处理,对于StringIndexer和IndexToString遇到了点问题,查阅官方文档也没有解决疑惑。...更多内容参考我的大数据学习之路 文档说明 StringIndexer 字符串索引 StringIndexer可以把字符串的列按照出现频率进行排序,出现次数最高的对应的Index为0。...针对训练集中没有出现的字符串值,spark提供了几种处理的方法: error,直接抛出异常 skip,跳过该样本数据 keep,使用一个新的最大索引,来表示所有未出现的值 下面是基于Spark MLlib...:128) at scala.collection.AbstractMap.getOrElse(Map.scala:59) at org.apache.spark.sql.types.StructType.apply...category") .setOutputCol("categoryIndex") .setHandleInvalid("skip") .fit(df) 这里面的fit就是训练转换器了

2.7K00

BigData--大数据技术之SparkSQL

然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。...3)Dataset支持编解码器,当需要访问非堆上的数据可以避免反序列化整个对象,提高了效率。...5) Dataframe是Dataset的特列,DataFrame=Dataset[Row] ,所以可以通过as方法将Dataframe换为Dataset。...比如可以有Dataset[Car],Dataset[Person]. 7)DataFrame只是知道字段,但是不知道字段的类型,所以执行这些操作的时候是没办法在编译的时候检查是否类型失败的,比如你可以对一个...String进行减法操作,执行的时候才报错,而DataSet不仅仅知道字段,而且知道字段类型,所以有更严格的错误检查。

1.3K10

DataFrame和Dataset简介

Scala 和 Java 语言中使用。...的查询语句,则直到运行时你才会发现有语法错误,而如果你用的是 DataFrame 和 Dataset,则在编译就可以发现错误 (这节省了开发时间和整体代价)。...DataFrame 和 Dataset 主要区别在于: DataFrame 中,当你调用了 API 之外的函数,编译器就会报错,但如果你使用了一个不存在的字段名字,编译器依然无法发现。...而 Dataset 的 API 都是用 Lambda 函数和 JVM 类型对象表示的,所有不匹配的类型参数在编译就会被发现。 以上这些最终都被解释成关于类型安全图谱,对应开发中的语法和分析错误。...,Spark 会将其转换为一个逻辑计划; Spark 将此逻辑计划转换为物理计划,同时进行代码优化; Spark 然后集群上执行这个物理计划 (基于 RDD 操作) 。

2.1K10

Note_Spark_Day08:Spark SQL(Dataset是什么、外部数据源、UDF定义和分布式SQL引擎)

针对RDD、DataFrame与Dataset三者编程比较来说,Dataset API无论语法错误和分析错误在编译都能发现,然而RDD和DataFrame有的需要在运行时才能发现。...此外RDD与Dataset相比较而言,由于Dataset数据使用特殊编码,所以存储数据更加节省内存。...由于Dataset数据结构,是一个强类型分布式集合,并且采用特殊方式对数据进行编码,所以与DataFrame相比,编译发现语法错误和分析错误,以及缓存数据比RDD更加节省空间。...将RDD转换为Dataset,可以通过隐式, 要求RDD数据类型必须是CaseClass val ratingDS: Dataset[MovieRating] = ratingRDD.toDS()...,封装到DataFrame中,指定CaseClass,转换为Dataset scala> val empDF = spark.read.json("/datas/resources/employees.json

4K40
领券