`
bit1129
  • 浏览: 1068068 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

【Spark九十三】Spark读写Sequence File

 
阅读更多

 

1. 代码:

package spark.examples.fileformat

import org.apache.spark.{SparkConf, SparkContext}

object SequenceFileTest {
  def main(args: Array[String]) {
    val conf = new SparkConf()
    conf.setAppName("SequenceFileTest")
    conf.setMaster("local[3]")
    val sc = new SparkContext(conf)
    val data = List(("ABC", 1), ("BCD", 2), ("CDE", 3), ("DEF", 4), ("FGH", 5))
    val rdd = sc.parallelize(data, 1)
    val dir = "file:///D:/sequenceFile-" + System.currentTimeMillis()
    rdd.saveAsSequenceFile(dir)
    val rdd2 = sc.sequenceFile[String, Int](dir + "/part-00000")
    println(rdd2.collect().map(elem => (elem._1 + ", " + elem._2)).toList)
  }
}

 

2. SequenceFile的内容:



 

3.注意:

saveAsSequenceFile是SequenceFileRDDFunctions定义的方法,但是在上面的代码中并没有显式的指定隐式转换,原因是上面的代码运行于Spark1.3中,在SparkContext中有如下的注释解释了这种行为

  // The following implicit functions were in SparkContext before 1.3 and users had to
  // `import SparkContext._` to enable them. Now we move them here to make the compiler find
  // them automatically. However, we still keep the old functions in SparkContext for backward
  // compatibility and forward to the following functions directly.
implicit def intWritableConverter(): WritableConverter[Int] =
    simpleWritableConverter[Int, IntWritable](_.get)

  implicit def longWritableConverter(): WritableConverter[Long] =
    simpleWritableConverter[Long, LongWritable](_.get)

  implicit def doubleWritableConverter(): WritableConverter[Double] =
    simpleWritableConverter[Double, DoubleWritable](_.get)

  implicit def floatWritableConverter(): WritableConverter[Float] =
    simpleWritableConverter[Float, FloatWritable](_.get)

  implicit def booleanWritableConverter(): WritableConverter[Boolean] =
    simpleWritableConverter[Boolean, BooleanWritable](_.get)

  implicit def bytesWritableConverter(): WritableConverter[Array[Byte]] = {
    simpleWritableConverter[Array[Byte], BytesWritable] { bw =>
      // getBytes method returns array which is longer then data to be returned
      Arrays.copyOfRange(bw.getBytes, 0, bw.getLength)
    }
  }

  implicit def stringWritableConverter(): WritableConverter[String] =
    simpleWritableConverter[String, Text](_.toString)

  implicit def writableWritableConverter[T <: Writable](): WritableConverter[T] =
    new WritableConverter[T](_.runtimeClass.asInstanceOf[Class[T]], _.asInstanceOf[T])
}

 

而SequenceFileRDDFunctions是针对KV都是继承自Writable的PairRDD

 

/**
 * Extra functions available on RDDs of (key, value) pairs to create a Hadoop SequenceFile,
 * through an implicit conversion. Note that this can't be part of PairRDDFunctions because
 * we need more implicit parameters to convert our keys and values to Writable.
 *
 */
class SequenceFileRDDFunctions[K <% Writable: ClassTag, V <% Writable : ClassTag](
    self: RDD[(K, V)],
    _keyWritableClass: Class[_ <: Writable],
    _valueWritableClass: Class[_ <: Writable])
  extends Logging
  with Serializable {

 

 

 

  • 大小: 8.5 KB
分享到:
评论

相关推荐

    11、hadoop环境下的Sequence File的读写与合并

    Sequence File有三种格式:未压缩、基于Record压缩和基于Block压缩。 - **未压缩格式**:每个记录包含记录长度、键长度、键和值,每隔一定数量的记录会有一个同步标记,用于随机访问。 - **基于Record压缩格式**...

    Spark生产优化总结

    本文将从三个方向考虑 Spark 生产优化:磁盘存储、CPU cores 和内存。 磁盘存储优化 在 Spark 生产环境中,磁盘存储是非常重要的,Spark 一般结合 HDFS 来做数据处理。HDFS 常用的压缩方式有 gzip、bzip2、lzo、lz...

    基于redis的小文件合并应用,合并为Sequence File保存到HDFS.zip

    5. **后续处理**:在HDFS上,可以进一步使用MapReduce或Spark等计算框架对Sequence File进行分析和处理。 通过这种方式,我们可以有效地应对小文件过多的问题,同时利用Redis的高速缓存能力优化数据流动,最后通过...

    Mastering Spark for Data Science

    Focusing on a sequence of tutorials that deliver a working news intelligence service, you will learn about advanced Spark architectures, how to work with geographic data in Spark, and how to tune ...

    sequence-diagram.zip

    《序列图绘制工具sequence-diagram-js的深度解析与应用》 序列图,作为一种重要的系统建模工具,广泛应用于软件设计和开发中,它清晰地展示了系统内各对象间交互的顺序。sequence-diagram-js是一个基于JavaScript的...

    sequence等同于序列号

    ### Oracle数据库中的Sequence机制详解 #### 一、概述 在Oracle数据库中,`sequence`机制是一种自动生成唯一数值序列的方法,常用于为主键字段提供连续的整数值。它类似于其他数据库系统中的自动增长字段,但在...

    【SparkCore篇07】RDD数据读取和保存1

    2. 将RDD保存为Sequence文件:`rdd.saveAsSequenceFile("file:///opt/module/spark/seqFile")` 3. 读取Sequence文件:`val seq = sc.sequenceFile[Int, Int]("file:///opt/module/spark/seqFile")` 4. 打印读取的...

    NumberSequence

    在AX中,Number Sequence由三个主要部分组成:Code、Prefix和Suffix。Code是序列的唯一标识符,用于内部引用;Prefix是在每个序列号码前附加的文本,比如"INV-";Suffix则是在号码后附加的文本,如默认的日期格式。 ...

    Activiti 学习笔记七:连线(SequenceFlow)

    三、使用SequenceFlow设计流程 在 Activiti Studio 或其他 BPMN 编辑器中,我们可以拖拽并放置 SequenceFlow 来构建流程模型。以下是一些关键步骤: 1. 添加活动:首先,在画布上添加需要的活动,如用户任务(User ...

    Sequence to Sequence Learning with Neural Networksv论文

    《Sequence to Sequence Learning with Neural Networks》是一篇由Ilya Sutskever, Oriol Vinyals和Quoc V. Le共同撰写的论文,三位作者都来自Google公司。这篇论文在自然语言处理领域有着重要的影响,特别是在序列...

    Oracle sequence 重置(失效恢复)

    #### 三、Sequence重置方法 下面将详细介绍如何通过SQL脚本来重置Sequence,使其恢复正常功能。 ### SQL脚本实现 首先,我们定义了一个函数`func_getseq`,该函数接受一个表名作为参数,并返回该表主键的最大值。...

    SequenceDiagram-3.0.5.zip

    SequenceDiagram-3.0.5.zip 是一个包含 Sequence Diagram 相关工具或资源的压缩包文件,主要用于绘制序列图,这是UML(统一建模语言)中的一种图表,用于描述对象之间的交互和消息传递顺序。在软件开发过程中,序列...

    sequence-to-sequence learning

    机器学习之sequence to sequence learning。(Sequence Generation-----Hung-yi Lee 李宏毅.ppt)

    Sequence简单介绍.pdf

    ### Sequence简单介绍 #### 序列(Sequence)概念解析及应用 序列(Sequence)是一种用于生成一系列数值的数据对象,常用于数据库系统中为主键提供自动递增的功能。本篇文章主要聚焦于Oracle数据库与SQL Server...

    SequenceDiagram.zip

    **序号图(Sequence Diagram)**是统一建模语言(UML)中的一种图形表示,用于描述系统中对象之间的交互顺序。它清晰地展现了不同对象如何通过消息传递进行通信,以及这些消息的时间顺序。在软件设计和分析阶段,...

    oracle中sequence介绍及应用

    #### 三、Sequence的使用 - **获取下一个序列值**:使用`.nextval`来获取下一个序列值。 - **获取当前序列值**:使用`.curval`来获取当前序列值。 ##### 示例: 获取`SEQ_TEST`序列的下一个值。 ```sql SELECT ...

    Oracle创建自增字段方法-ORACLE SEQUENCE的简单介绍

    Oracle 创建自增字段方法-ORACLE SEQUENCE 的简单介绍 Oracle SEQUENCE 是一种特殊的数据库对象,用于生成一系列唯一的数值,通常用于主键或其他需要唯一标识的字段。下面将详细介绍 Oracle 创建自增字段方法-...

    oracle中的sequence实现主键增长

    Oracle中的Sequence是数据库管理系统提供的一种机制,用于生成序列化的整数,通常用于主键或唯一标识符,确保数据的唯一性和有序性。在Oracle中,Sequence不同于其他数据库系统的自增字段,例如SQL Server中的`...

    Informatica中Sequence Generator的两个有用的选项

    Informatica 中 Sequence Generator 的两个有用的选项 Informatica 是一个功能强大且常用的数据集成工具,在数据集成过程中,Sequence Generator 是一个非常重要的组件,用于生成唯一的序列号,作为表的主键或其他...

Global site tag (gtag.js) - Google Analytics