package org.apache.mahout.text;目的:目录下文本文件转成sequence格式
main函数入口SequenceFilesFromDirectory类
三个基本项,fs writer 和 filter
FileSystem fs = FileSystem.get(conf);
ChunkedWriter writer = new ChunkedWriter(conf, Integer.parseInt(options.get(CHUNK_SIZE_OPTION[0])), output);
SequenceFilesFromDirectoryFilter pathFilter;
默认PrefixAdditionFilter实现
否则动态加载SequenceFilesFromDirectoryFilter子类
String fileFilterClassName = options.get(FILE_FILTER_CLASS_OPTION[0]);
if (PrefixAdditionFilter.class.getName().equals(fileFilterClassName)) {
pathFilter = new PrefixAdditionFilter(conf, keyPrefix, options, writer);
} else {
Class<? extends SequenceFilesFromDirectoryFilter> pathFilterClass = Class.forName(fileFilterClassName).asSubclass(SequenceFilesFromDirectoryFilter.class);
Constructor<? extends SequenceFilesFromDirectoryFilter> constructor =
pathFilterClass.getConstructor(Configuration.class, String.class, Map.class, ChunkedWriter.class);
pathFilter = constructor.newInstance(conf, keyPrefix, options, writer);
}
package org.apache.mahout.text;抽象的SequenceFilesFromDirectoryFilter类
遍历路径下文件,抽象函数
@Override
public final boolean accept(Path current) {
log.debug("CURRENT: {}", current.getName());
try {
for (FileStatus fst : fs.listStatus(current)) {
log.debug("CHILD: {}", fst.getPath().getName());
process(fst, current);
}
} catch (IOException ioe) {
throw new IllegalStateException(ioe);
}
return false;
}
protected abstract void process(FileStatus in, Path current) throws IOException;
package org.apache.mahout.text;public final class PrefixAdditionFilter extends SequenceFilesFromDirectoryFilter
默认路径加前缀的处理实现
InputStream in = null;
try {
in = fs.open(fst.getPath());
StringBuilder file = new StringBuilder();
for (String aFit : new FileLineIterable(in, charset, false)) {
file.append(aFit).append('\n');
}
String name = current.getName().equals(fst.getPath().getName())
? current.getName()
: current.getName() + Path.SEPARATOR + fst.getPath().getName();
writer.write(prefix + Path.SEPARATOR + name, file.toString());
}
package org.apache.mahout.text;public final class ChunkedWriter implements Closeable
对SequenceFile.Writer的一个封装
初始化
maxChunkSizeInBytes = chunkSizeInMB * 1024 * 1024;
fs = FileSystem.get(conf);
currentChunkID = 0;
writer = new SequenceFile.Writer(fs, conf, getPath(currentChunkID), Text.class, Text.class);
路径拼接
private Path getPath(int chunkID) {
return new Path(output, "chunk-" + chunkID);
}
块大小超过则另外开一个writer
public void write(String key, String value) throws IOException {
if (currentChunkSize > maxChunkSizeInBytes) {
writer.close();
writer = new SequenceFile.Writer(fs, conf, getPath(currentChunkID++), Text.class, Text.class);
currentChunkSize = 0;
}
Text keyT = new Text(key);
Text valueT = new Text(value);
currentChunkSize += keyT.getBytes().length + valueT.getBytes().length; // Overhead
writer.append(keyT, valueT);
}
分享到:
相关推荐
旋转检测 要求 torch==1.6 shapely==1.7.1 opencv==4.2.0.34
1.版本:matlab2014/2019a/2021a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。
基于springboot的java毕业&课程设计
智慧藏文化博物馆建设方案PPT(79页)
基于springboot的java毕业&课程设计
动作识别_基于OpenPose实现的实时姿态估计+动作识别_附项目源码_优质项目实战
机器学习之随机森林算法
反弹shell
该系统是针对各类学院或者研究院的项目管理而设计开发的。它实现了项目的各类信息的录入、修改、查询和报表打印等功能,这些信息主要包括项目的基本情况、项目进展程度、项目经费开支、以及科研成果和项目获奖情况等。该系统界面友好清晰,使用方便快捷,它简化了项目的管理过程,提高了科研管理人员的工作效率,从而节省了人力资源与经费开支,有利于经济效益的提高和科研事业的发展。
STM32/GD32 I2C DMA 主从通信 定长主从通信代码示例
课设毕设基于SSM的大学生兼职跟踪系统 LW+PPT+源码可运行.zip
巨灾保险问题及对策研究.docx
卷积神经网络(Convolutional Neural Networks, CNNs 或 ConvNets)是一类深度神经网络,特别擅长处理图像相关的机器学习和深度学习任务。它们的名称来源于网络中使用了一种叫做卷积的数学运算。以下是卷积神经网络的一些关键组件和特性: 卷积层(Convolutional Layer): 卷积层是CNN的核心组件。它们通过一组可学习的滤波器(或称为卷积核、卷积器)在输入图像(或上一层的输出特征图)上滑动来工作。 滤波器和图像之间的卷积操作生成输出特征图,该特征图反映了滤波器所捕捉的局部图像特性(如边缘、角点等)。 通过使用多个滤波器,卷积层可以提取输入图像中的多种特征。 激活函数(Activation Function): 在卷积操作之后,通常会应用一个激活函数(如ReLU、Sigmoid或tanh)来增加网络的非线性。 池化层(Pooling Layer): 池化层通常位于卷积层之后,用于降低特征图的维度(空间尺寸),减少计算量和参数数量,同时保持特征的空间层次结构。 常见的池化操作包括最大池化(Max Pooling)和平均池化(Average Po
Unity插件 Translucent Image 可帮助你构建精美的模糊背景 UI,例如在 iOS/MacOS/Windows 10 Fluent 设计中的 UI。 与许多其他背景模糊解决方案不同,Translucent Image 采用一种对性能影响最小的高效算法,因此用户可以享受更高的帧速率和更长的电池寿命。不仅如此,当你将模糊调高时,它还可以产生完美的平滑效果,而其它资源在高度模糊时会呈现难看的块状图像。
微信小程序设计之相关行业源码及图文导入教程
react中的组件定义
课程设计 基于Python的机器学习的人脸识别系统的设计与实现+详细文档+全部资料(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 课程设计 基于Python的机器学习的人脸识别系统的设计与实现+详细文档+全部资料(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 课程设计 基于Python的机器学习的人脸识别系统的设计与实现+详细文档+全部资料(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。资源项目的难度比较适中,内容都是经过助教老师审定过的能够满足学习、使用需求,如果有需要的话可以放心下载使用。 课程设计 基于Python的机器学习的人脸识别系统的设计与实现+详细文档+全部资料(高分项目).zip本资源中的源码都是经过本地编译过可运行的,评审分达到95分以上。
微信小程序设计之相关行业源码及图文导入教程
AndroidStudio_WiFiManager-master
【微电网优化】粒子群优化算法的微电网调度(光伏、储能、电动车、电网交互)【含Matlab源码 2190期】.zip