这个示例中 , 我们创建了一个名为 My Accumulator 的累加器 , 并使用 sc.parallelize(Array(1, 2, 3, 4)).foreach(x => accum.add(x)) 来对其进行累加 。最后 , 我们使用 println(accum.value) 来输出累加器的值,结果为 10 。
我们可以利用子类AccumulatorParam创建自己的累加器类型 。AccumulatorParam接口有两个方法:zero方法为你的数据类型提供一个“0 值”(zero value),addInPlace方法计算两个值的和 。例如,假设我们有一个Vector类代表数学上的向量,我们能够如下定义累加器:
object VectorAccumulatorParam extends AccumulatorParam[Vector] {def zero(initialValue: Vector): Vector = {Vector.zeros(initialValue.size)}def addInPlace(v1: Vector, v2: Vector): Vector = {v1 += v2}}// Then, create an Accumulator of this type:val vecAccum = sc.accumulator(new Vector(...))(VectorAccumulatorParam)
九、Spark SQLSpark为结构化数据处理引入了一个称为Spark SQL的编程模块 。它提供了一个称为DataFrame的编程抽象,并且可以充当分布式SQL查询引擎 。
1.Spark SQL的特性
- 集成:无缝地将SQL查询与Spark程序混合 。Spark SQL允许将结构化数据作为Spark中的分布式数据集(RDD)进行查询 , 在Python,Scala和Java中集成了API 。这种紧密的集成使得可以轻松地运行SQL查询以及复杂的分析算法 。
- Hive兼容性:在现有仓库上运行未修改的Hive查询 。Spark SQL重用了Hive前端和MetaStore,提供与现有Hive数据,查询和UDF的完全兼容性 。只需将其与Hive一起安装即可 。
- 标准连接:通过JDBC或ODBC连接 。Spark SQL包括具有行业标准JDBC和ODBC连接的服务器模式 。
- 可扩展性:对于交互式查询和长查询使用相同的引擎 。Spark SQL利用RDD模型来支持中查询容错,使其能够扩展到大型作业 。不要担心为历史数据使用不同的引擎 。
数字类型包括:
- ByteType:代表一个字节的整数,范围是 -128 到 127¹² 。
- ShortType:代表两个字节的整数,范围是 -32768 到 32767¹² 。
- IntegerType:代表四个字节的整数 , 范围是 -2147483648 到 2147483647¹² 。
- LongType:代表八个字节的整数,范围是 -9223372036854775808 到 9223372036854775807¹² 。
- FloatType:代表四字节的单精度浮点数¹² 。
- DoubleType:代表八字节的双精度浮点数¹² 。
- DecimalType:代表任意精度的十进制数据 , 通过内部的 java.math.BigDecimal 支持 。BigDecimal 由一个任意精度的整型非标度值和一个 32 位整数组成¹² 。
- StringType:代表字符字符串值 。
- BinaryType:代表字节序列值 。
- BooleanType:代表布尔值 。
- TimestampType:代表包含字段年、月、日、时、分、秒的值 , 与会话本地时区相关 。时间戳值表示绝对时间点 。
- DateType:代表包含字段年、月和日的值,不带时区 。
- YearMonthIntervalType (startField, endField):表示由以下字段组成的连续子集组成的年月间隔:MONTH(月份) , YEAR(年份) 。
- DayTimeIntervalType (startField, endField):表示由以下字段组成的连续子集组成的日时间间隔:SECOND(秒) , MINUTE(分钟),HOUR(小时),DAY(天) 。
- ArrayType (elementType, containsNull):代表由 elementType 类型元素组成的序列值 。containsNull 用来指明 ArrayType 中的值是否有 null 值 。
- MapType (keyType, valueType, valueContainsNull):表示包括一组键值对的值 。通过 keyType 表示 key 数据的类型,通过 valueType 表示 value 数据的类型 。valueContainsNull 用来指明 MapType 中的值是否有 null 值 。
推荐阅读
- 烤箱新手教程 烤箱入门窍门
- 指南针的作用和意义 指南针的作用意义是什么
- 精致女生减肥指南,20个习惯,做到一半,就能再瘦70年
- 微波炉怎么选购指南视频 微波炉怎么选购指南
- 指南针怎么看 指南针怎么看海拔
- 抖音产业带服务商入驻详细指南!
- 春节社交礼仪 春节社交礼仪指南
- 中国早期的指南针也被称为什么?A 中国早期的指南针也被称为什么
- Tomcat目录结构详解:从新手到专家的指南
- “十一”长假哪天最堵?这份“避堵”指南请收好