正如标题所说,这是我现在的目标。
我需要从一个目录加载一堆非文本文件
从中提取常用的文件信息(创建日期、作者、类型。。。那些人)
创建以下类型的序列文件
将新提取的信息放入.seq文件的键中
将它们全部存储在hdfs目录中。
我使用spark的原因是为了可伸缩性(需要处理数千个文件,并且我将有一个可用的worker集群),因为我正在考虑在image目录上实现sparkstreaming接收器,这样文件将被自动处理。这是我的初始代码:
JavaPairRDD<String, String> imageRDD = jsc.wholeTextFiles("file:///home/cloudera/Pictures/");
imageRDD.mapToPair(new PairFunction<Tuple2<String,String>, Text, Text>() {
@Override
public Tuple2<Text, Text> call(Tuple2<String, String> arg0)
throws Exception {
return new Tuple2<Text, Text>(new Text(arg0._1),new Text(arg0._2));
}
}).saveAsNewAPIHadoopFile("hdfs://localhost:8020/user/hdfs/sparkling/try.seq", Text.class, Text.class, SequenceFileOutputFormat.class);
在这里,我将图像作为文本文件加载,并从hadoop库中创建一个文本类型的元组。这是可行的,但是:
文件不是保存为单个文件,而是保存为包含分区的文件夹。
它不是字节数组,而是文件的文本表示形式。我们都知道从文本到图像(或其他任何形式)的转换是多么烦人
如果我像这样加载文件,会有办法提取所需的信息吗?
我试着把文件装成aa sparkContext.binaryFiles(<directory>)
,但我总是迷茫于如何提取信息以及如何保存它们。
我似乎在网上找不到答案:你们有人知道这件事吗?
1条答案
按热度按时间iszxjhcz1#
我是这样做的: