返回顶部
首页 > 资讯 > 精选 >java 中Spark中将对象序列化存储到hdfs
  • 500
分享到

java 中Spark中将对象序列化存储到hdfs

javaspark对象序列化 2023-05-31 13:05:11 500人浏览 安东尼
摘要

java 中Spark中将对象序列化存储到hdfs摘要: spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到hdfs, 尤其是利用MLlib计算出来的一些模型, 存储到hdfs以便模型可以反复利用. 下面的例子演示了

java 中Spark中将对象序列化存储到hdfs

摘要: spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到hdfs, 尤其是利用MLlib计算出来的一些模型, 存储到hdfs以便模型可以反复利用. 下面的例子演示了Spark环境下从HBase读取数据, 生成一个Word2vec模型, 存储到hdfs.

废话不多说, 直接贴代码了. spark1.4 + hbase0.98

import org.apache.spark.storage.StorageLevelimport Scala.collection.JavaConverters._import java.io.Fileimport java.io.FileInputStreamimport java.io.FileOutputStreamimport java.io.ObjectInputStreamimport java.io.ObjectOutputStreamimport java.net.URIimport java.util.Dateimport org.ansj.library.UserDefineLibraryimport org.ansj.splitWord.analysis.NLPAnalysisimport org.ansj.splitWord.analysis.ToAnalysisimport org.apache.hadoop.fs.FSDatainputStreamimport org.apache.hadoop.fs.FSDataOutputStreamimport org.apache.hadoop.fs.FileSystemimport org.apache.hadoop.fs.FileUtilimport org.apache.hadoop.fs.Pathimport org.apache.hadoop.hbase.client._import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName}import org.apache.hadoop.hbase.filter.FilterListimport org.apache.hadoop.hbase.filter.PageFilterimport org.apache.hadoop.hbase.filter.RegexStrinGComparatorimport org.apache.hadoop.hbase.filter.SingleColumnValueFilterimport org.apache.hadoop.hbase.filter.CompareFilter.CompareOpimport org.apache.hadoop.hbase.mapReduce.TableInputFORMatimport org.apache.hadoop.hbase.protobuf.ProtobufUtilimport org.apache.hadoop.hbase.util.{Base64, Bytes}import com.feheadline.fespark.db.Neo4jManagerimport com.feheadline.fespark.util.Envimport org.apache.spark.SparkConfimport org.apache.spark.SparkContextimport org.apache.spark.rdd._import org.apache.spark.mllib.feature.{Word2Vec, Word2VecModel}import scala.math.logimport scala.io.Sourceobject Word2VecDemo { def convertScanToString(scan: Scan) = {  val proto = ProtobufUtil.toScan(scan)  Base64.encodeBytes(proto.toByteArray) } def main(args: Array[String]): Unit = {  val sparkConf = new SparkConf().setAppName("Word2Vec Demo")  sparkConf.set("spark.serializer", "org.apache.spark.serializer.KryoSerializer")  sparkConf.set("spark.kryoserializer.buffer", "256m")  sparkConf.set("spark.kryoserializer.buffer.max","2046m")  sparkConf.set("spark.akka.frameSize", "500")  sparkConf.set("spark.rpc.askTimeout", "30")    val sc = new SparkContext(sparkConf)  val hbaseConf = HBaseConfiguration.create()  hbaseConf.set("hbase.ZooKeeper.quorum", "myzookeeper")  hbaseConf.set(TableInputFormat.INPUT_TABLE, "crawled")  val scan = new Scan()  val filterList:FilterList = new FilterList(FilterList.Operator.MUST_PASS_ALL)    val comp:RegexStringComparator = new RegexStringComparator(""".{1500,}""")    val articleFilter:SingleColumnValueFilter = new SingleColumnValueFilter(  "data".getBytes,  "article".getBytes,  CompareOp.EQUAL,  comp  )    filterList.addFilter(articleFilter)  filterList.addFilter(new PageFilter(100))    scan.setFilter(filterList)  scan.setCaching(50)  scan.setCacheBlocks(false)  hbaseConf.set(TableInputFormat.SCAN,convertScanToString(scan))  val crawledRDD = sc.newapiHadoopRDD(   hbaseConf,   classOf[TableInputFormat],   classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],   classOf[org.apache.hadoop.hbase.client.Result]  )   val articlesRDD = crawledRDD.filter{   case (_,result) => {     val content = Bytes.toString(result.getValue("data".getBytes,"article".getBytes))     content != null   }  }  val wordsInDoc = articlesRDD.map{   case (_,result) => {     val content = Bytes.toString(result.getValue("data".getBytes,"article".getBytes))     if(content!=null)ToAnalysis.parse(content).asScala.map(_.getName).toSeq     else Seq("")   }  }    val fitleredWordsInDoc = wordsInDoc.filter(_.nonEmpty)    val word2vec = new Word2Vec()  val model = word2vec.fit(fitleredWordsInDoc)    //---------------------------------------重点看这里-------------------------------------------------------------  //将上面的模型存储到hdfs  val hadoopConf = sc.hadoopConfiguration  hadoopConf.set("fs.defaultFS", "hdfs://myhadoop:9000/")  val fileSystem = FileSystem.get(hadoopConf)  val path = new Path("/user/hadoop/data/mllib/word2vec-object")  val oos = new ObjectOutputStream(new FSDataOutputStream(fileSystem.create(path)))  oos.writeObject(model)  oos.close    //这里示例另外一个程序直接从hdfs读取序列化对象使用模型  val ois = new ObjectInputStream(new FSDataInputStream(fileSystem.open(path)))  val sample_model = ois.readObject.asInstanceOf[Word2VecModel]      //-------------------------------------------------------------------------------------------------------------- }}

--结束END--

本文标题: java 中Spark中将对象序列化存储到hdfs

本文链接: https://lsjlt.com/news/225631.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • java 中Spark中将对象序列化存储到hdfs
    java 中Spark中将对象序列化存储到hdfs摘要: Spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到HDFS, 尤其是利用MLlib计算出来的一些模型, 存储到hdfs以便模型可以反复利用. 下面的例子演示了...
    99+
    2023-05-31
    java spark 对象序列化
  • 在Python 中将类对象序列化为JSON
    目录1. 引言2. 举个栗子3. 解决方案3.1 使用 json.dumps() 和 __dict__3.2 实现 __str__ 和 __repr__3.3 实现 JSON enc...
    99+
    2024-04-02
  • SpringBoot怎么整合Redis实现序列化存储Java对象
    今天小编给大家分享一下SpringBoot怎么整合Redis实现序列化存储Java对象的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解...
    99+
    2023-07-05
  • 如何将复杂对象序列化为Redis可存储的形式
    将复杂对象序列化为Redis可存储的形式可以通过以下几种方法: 使用JSON序列化:将复杂对象转换为JSON字符串,然后将其存储...
    99+
    2024-04-29
    Redis
  • Java中怎么实现对象的序列化和反序列化
    这篇文章给大家分享的是有关Java中怎么实现对象的序列化和反序列化的内容。小编觉得挺实用的,因此分享给大家做个参考。一起跟随小编过来看看吧。引言:序列化是将对象的状态信息转换为可以存储或传输的形式的过程,在...
    99+
    2024-04-02
  • 在Python中怎么将类对象序列化为JSON
    本文小编为大家详细介绍“在Python中怎么将类对象序列化为JSON”,内容详细,步骤清晰,细节处理妥当,希望这篇“在Python中怎么将类对象序列化为JSON”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。1. ...
    99+
    2023-06-29
  • Java 中对象的序列化和反序列化有什么区别
    本篇文章给大家分享的是有关Java 中对象的序列化和反序列化有什么区别,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。主要内容如下:简洁的代码实现序列化实现的基本算法两种特殊的情...
    99+
    2023-05-31
    反序列化 java 序列化
  • Android中的Parcelable序列化对象
    今天查阅资料,简单了解了一下Parcelable接口,它是android提供的序列化对象的接口,比java中的 Serializable高效些。通过这个接口序列化对象主要有两...
    99+
    2022-06-06
    对象 Android
  • Redis缓存-序列化对象存储乱码问题的解决
    使用Redis缓存对象会出现下图现象: 键值对都是乱码形式。 解决以上问题: 如果是xml配置的 我们直接注入官方给定的keySerializer,valueSerializer,...
    99+
    2024-04-02
  • Python中的对象是什么?如何将其存储到文件中?
    Python是一门面向对象的编程语言,它的一切都是对象。对象是Python中非常重要的概念,是Python编程语言的核心。在Python中,一切皆对象,比如整数、浮点数、字符串、列表、元组、字典等都是对象。 那么,什么是对象呢?对象是指在...
    99+
    2023-07-30
    对象 文件 编程算法
  • SpringBoot整合Redis实现序列化存储Java对象的操作方法
    目录一、背景1、思考2、方案二、源码分析三、注入RedisTemplate1、引入依赖2、Redis 连接信息3、Redis 核心配置类4、Redis工具类四、测试1、创建 Java 实体类 UserInfo2、测试用例...
    99+
    2023-03-23
    SpringBoot整合Redis序列化存储Java对象 SpringBoot整合Redis SpringBoot Redis序列化存储
  • Java中的对象流和序列化怎么用
    本篇内容主要讲解“Java中的对象流和序列化怎么用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java中的对象流和序列化怎么用”吧!       &nb...
    99+
    2023-06-02
  • Java中对象的序列化详解及实例
     Java中对象的序列化详解及实例把java对象转化为字节序列的过程称为对象的序列化。把字节序列恢复为java对象的过程称为对象的反序列化。对象序列化的用途:把对象的字节序列永久的保存到硬盘上,通常存放在一个文件中2.在网络上传送...
    99+
    2023-05-31
    java 序列化 中对
  • 使用Redis存储序列化对象有哪些优缺点
    优点: 快速读写:Redis是内存数据库,读写速度非常快。 支持多种数据结构:Redis支持多种数据结构,可以存储各种类型的序列化...
    99+
    2024-04-29
    Redis
  • 如何将Java对象序列化成JSON和XML格式
    这篇文章给大家分享的是有关如何将Java对象序列化成JSON和XML格式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。1.先定义一个Java对象Person:public class Pers...
    99+
    2023-05-30
    java
  • 如何在Java项目中利用序列化与反序列化将对象文件写入与导出
    如何在Java项目中利用序列化与反序列化将对象文件写入与导出?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java类中对象的序列化工作是通过ObjectOutp...
    99+
    2023-05-31
    java 序列化 反序列化
  • 如何在java中存储对象头
    如何在java中存储对象头?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。常用的java框架有哪些1.SpringMVC,Spring Web MVC是一种基于Java的实现了W...
    99+
    2023-06-14
  • Spring容器中如何优化Java对象的存储方式?
    Spring是一个流行的开源框架,用于构建企业级应用程序。它提供了许多功能,包括依赖注入和面向切面编程。Spring框架的核心是容器,它是一个管理Java对象的运行时环境。在这篇文章中,我们将探讨Spring容器中如何优化Java对象的存储...
    99+
    2023-11-02
    存储 spring 容器
  • C#开发中如何处理对象序列化和反序列化
    C#开发中如何处理对象序列化和反序列化,需要具体代码示例在C#开发中,对象序列化和反序列化是非常重要的概念。序列化是将对象转换为可以在网络上传输或在磁盘上存储的格式,而反序列化则是将序列化后的数据重新转换为原始对象。本文将介绍在C#中如何处...
    99+
    2023-10-22
    序列化 反序列化 对象处理
  • Android中Serializable和Parcelable序列化对象详解
    本文详细对Android中Serializable和Parcelable序列化对象进行学习,具体内容如下 学习内容: 1.序列化的目的 2.Android中序列化的两种方式 3...
    99+
    2022-06-06
    对象 Android
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作