前言
Dataset 是一种强类型的领域特定对象集合,可以在使用功能或关系操作的同时进行转换。每个 Dataset 也有一个名为 “DataFrame” 的无类型视图,它是 [[Row]] 的 Dataset。
Dataset 上可用的操作分为转换和动作:
转换:产生新的 Dataset ;包括 map, filter, select, and aggregate (
groupBy
).
动作:触发计算并返回结果 ;包括 count, show, or 写数据到文件系统。
Dataset是懒加载的,例如:只有提交动作的时候才会触发计算。在内部,Datasets表示一个逻辑计划,它描述生成数据所需的计算。当提交动作时,Spark的查询优化器会优化逻辑计划,并以并行和分布式的方式生成有效执行的物理计划。请使用explain
功能,探索逻辑计划和优化的物理计划。
为了有效地支持特定于领域的对象,需要[[Encoder]]。编码器将特定类型的“T”映射到Spark的内部类型系统。例如:给一个 Person
类,并带有两个属性:name
(string) and age
(int),编码器告诉Spark在运行时生成代码,序列化 Person
对象为二进制结构。
通常有两种创建Dataset的方法:
使用
SparkSession
上可用的read
方法读取 Spark 指向的存储系统上的文件。
用现存的 Datasets 转换而来。
Dataset操作也可以是无类型的,通过多种领域专用语言(DSL)方法定义:这些操作非常类似于 R或Python语言中的 数据框架抽象中可用的操作。
basic-基础方法
toDF
1 | /** |
as
1 | /** |
schema
1 | /** |
printSchema
1 | /** |
explain
1 | /** |
dtypes
1 | /** |
columns
1 | /** |
isLocal
1 | /** |
checkpoint
1 | /** |
persist
1 | /** |
cache
1 | /** |
storageLevel
1 | /** |
unpersist
1 | /** |
rdd
1 | /** |
toJavaRDD
1 | /** |
registerTempTable
1 | /** |
createTempView
1 | /** |
createOrReplaceTempView
1 | /** |
createGlobalTempView
1 | /** |
write
1 | /** |
writeStream
1 | /** |
toJSON
1 | /** |
inputFiles
1 | /** |
streaming
isStreaming
1 | /** |
withWatermark
1 | /** |
action
show
1 | /** |
reduce
1 | /** |
describe
1 | /** |
head
1 | /** |
first
1 | /** |
foreach
1 | /** |
foreachPartition
1 | /** |
take
1 | /** |
takeAsList
1 | /** |
collect
1 | /** |
collectAsList
1 | /** |
toLocalIterator
1 | /** |
count
1 | /** |
untypedrel-无类型转换
na
1 | /** |
stat
1 | /** |
join
1 | /** |
crossJoin
1 | /** |
apply
1 | /** |
col
1 | /** |
select
1 | /** |
selectExpr
1 | /** |
groupBy
1 | /** |
rollup
1 | /** |
cube
1 | /** |
agg
1 | /** |
explode
1 | /** |
withColumn
1 | /** |
withColumnRenamed
1 | /** |
drop
1 | /** |
typedrel-有类型的转换
joinWith
1 | /** |
sortWithinPartitions
1 | /** |
sort
1 | /** |
orderBy
1 | /** |
as
1 | /** |
alias
1 | /** |
select
1 | /** |
filter
1 | /** |
where
1 | /** |
groupByKey
1 | /** |
limit
1 | /** |
unionAll-已过时
1 | /** |
union
1 | /** |
intersect-交集
1 | /** |
except-只显示另个Dataset中没有的值
1 | /** |
sample-随机抽样
1 | /** |
randomSplit-按照权重分割
1 | /** |
randomSplitAsList
1 | /** |
dropDuplicates-去重
1 | /** |
transform-自定义转换
1 | /** |
filter-过滤
1 | /** |
map
1 | /** |
mapPartitions
1 | /** |
flatMap-将map结果flat扁平化
1 | /** |
repartition-重分区
1 | /** |
coalesce-合并分区
1 | /** |
distinct-去重
1 | /** |