我有以下问题:假设我有一个包含压缩目录的目录,其中包含存储在HDFS上的多个文件.我想创建一个包含T类型对象的RDD,即:

context = new JavaSparkContext(conf);

JavaPairRDD filesRDD = context.wholeTextFiles(inputDataPath);

JavaPairRDD filesRDD = context.wholeTextFiles(inputDataPath);

JavaRDD processingFiles = filesRDD.map(fileNameContent -> {

// The name of the file

String fileName = fileNameContent._1();

// The content of the file

String content = fileNameContent._2();

// Class T has a constructor of taking the filename and the content of each

// processed file (as two strings)

T t = new T(content, fileName);

return t;

});

现在当inputDataPath是一个包含文件的目录时,这个工作完全正常,即它是这样的:

String inputDataPath = "hdfs://some_path/*/*/"; // because it contains subfolders

但是,当有一个包含多个文件的tgz时,文件内容(fileNameContent._2())会给我一些无用的二进制字符串(非常期待).我找到了一个similar question on SO,但情况不同,因为解决方案是每个压缩只包含一个文件,而在我的情况下,还有许多其他文件我想单独读取整个文件.我还找到了关于wholeTextFiles的question,但这在我的情况下不起作用.

任何想法如何做到这一点?

编辑:

我试着从here开始尝试(尝试从here开始测试读卡器,就像在函数testTarballWithFolders()中一样),但每当我打电话时

TarballReader tarballReader = new TarballReader(fileName);

我得到NullPointerException:

java.lang.NullPointerException

at java.util.zip.InflaterInputStream.(InflaterInputStream.java:83)

at java.util.zip.GZIPInputStream.(GZIPInputStream.java:77)

at java.util.zip.GZIPInputStream.(GZIPInputStream.java:91)

at utils.TarballReader.(TarballReader.java:61)

at main.SparkMain.lambda$0(SparkMain.java:105)

at main.SparkMain$$Lambda$18/1667100242.call(Unknown Source)

at org.apache.spark.api.java.JavaPairRDD$$anonfun$toScalaFunction$1.apply(JavaPairRDD.scala:1015)

at scala.collection.Iterator$$anon$11.next(Iterator.scala:328)

at scala.collection.Iterator$class.foreach(Iterator.scala:727)

at scala.collection.AbstractIterator.foreach(Iterator.scala:1157)

at scala.collection.generic.Growable$class.$plus$plus$eq(Growable.scala:48)

at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:103)

at scala.collection.mutable.ArrayBuffer.$plus$plus$eq(ArrayBuffer.scala:47)

at scala.collection.TraversableOnce$class.to(TraversableOnce.scala:273)

at scala.collection.AbstractIterator.to(Iterator.scala:1157)

at scala.collection.TraversableOnce$class.toBuffer(TraversableOnce.scala:265)

at scala.collection.AbstractIterator.toBuffer(Iterator.scala:1157)

at scala.collection.TraversableOnce$class.toArray(TraversableOnce.scala:252)

at scala.collection.AbstractIterator.toArray(Iterator.scala:1157)

at org.apache.spark.rdd.RDD$$anonfun$collect$1$$anonfun$12.apply(RDD.scala:927)

at org.apache.spark.rdd.RDD$$anonfun$collect$1$$anonfun$12.apply(RDD.scala:927)

at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)

at org.apache.spark.SparkContext$$anonfun$runJob$5.apply(SparkContext.scala:1858)

at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:66)

at org.apache.spark.scheduler.Task.run(Task.scala:89)

at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:214)

at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)

at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)

at java.lang.Thread.run(Thread.java:745)

MainSpark中的第105行是我在帖子的编辑中显示的那一行,而来自TarballReader的第61行是

GZIPInputStream gzip = new GZIPInputStream(in);

它为上面的输入流提供了一个空值:

InputStream in = this.getClass().getResourceAsStream(tarball);

我在正确的道路上吗?如果是这样,我该如何继续?为什么我得到这个空值,我该如何解决?

java 读取 tgz_java – 从Spark中的压缩中读取整个文本文件相关推荐

  1. java压缩文件读取_用Java读取/写入压缩和非压缩文件

    java压缩文件读取 这篇文章的主要原因是尝试不要重复自己( DRY ),因为通常,我会遇到递归的需求,即读写压缩的和非压缩的文件(主要是JSON和CSV). 首先让我们看看如何读取文本文件. 注意我 ...

  2. HDFS和Spark配置LZO压缩,Spark读取LZO创建正常Task数量

    1.说明 为了解决,数据日益增长并且目前使用Snappy压缩导致的Spark读取时会出现OOM,并且处理起来速度过慢的问题,决定使用LZO+Index来解决问题. 线上Hadoop版本3.2.1,Sp ...

  3. Java中zip压缩解压

    1. 解压问题 360压缩文件 使用jdk API 读取压缩文件后解压,报错 java.lang.IllegalArgumentException:MALFORMED 如果是好压压缩文件,使用jdk ...

  4. 解决idea中maven项目无法读取src/main/java目录下面的配置文件问题

    解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 参考文章: (1)解决idea中maven项目无法读取src/main/java目录下面的配置文件问题 (2)ht ...

  5. 在 Java 中,如何批量读取本项目资源目录下的所有文件

    在 Java 中,如何批量读取本项目资源目录下的所有文件 读取资源目录下的指定文件 方法 1:使用 JDK 中原始 API 方法 2:借助 Spring 附录 将 InputStream 转化为 by ...

  6. java io 文件路径_如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径...

    如何从Java项目中的相对路径读取文件? java.io.File找不到指定的路径 我有一个包含2个包的项目: ListStopWords.txt ListStopWords.txt 在包(2)中我有 ...

  7. java给xml加入值,怎么用java读取XML文件里的值并加入jsp页面中的下拉列表中

    如何用java读取XML文件里的值并加入jsp页面中的下拉列表中? 如何用java读取XML文件里的值并加入jsp页面中的下拉列表中? java xml jsp 分享到: ------解决方案---- ...

  8. Java中使用字符流读取UTF-8和写出txt文件 乱码 问题

    乱码问题一直都是非常难受的问题,本文解决Java中使用字符流读取UTF-8和写出txt文件 乱码 话不多说,直接上图 输出结果: 使用代码: 解决:

  9. Java读取、写入、处理Excel文件中的数据

    在日常工作中,我们常常会进行文件读写操作,除去我们最常用的纯文本文件读写,更多时候我们需要对Excel中的数据进行读取操作,本文将介绍Excel读写的常用方法,希望对大家学习Java读写Excel会有 ...

最新文章

  1. php 魔术变量和超级全局变量,PHP超级全局变量与魔术变量
  2. VMware Workstation 更改语言
  3. 【bzoj4698】[Sdoi2008] Sandy的卡片 后缀数组
  4. Smali文件添加try/catch语句,出现“invalid use of move-exception”异常
  5. codemirror mysql_CodeMirror 实现 JavaScript、 MySql 关键字的变色和自动实时提示 autocomplete...
  6. Vue的常用指令(v-html {{}}文本插值,v-bind绑定属性,v-if条件渲染,v-for列表渲染,v-on @ 事件绑定,v-model表单绑定)
  7. Spring Boot 1:Introduction
  8. Kubernetes的Device Plugin设计解读
  9. iOS网络开发(5)请求的缓存
  10. bcb6通过https接口post数据_3分钟短文 | 有挑战!PHP用1个函数实现post请求,你用哪个?
  11. ubuntu服务器无法运行chromedriver解决方法(转)
  12. 二叉树非递归遍历(先序、中序、后序)(C++)
  13. 阿里云部署网站全流程(基于nodejs)
  14. oracle数据库一个汉字占几个字节
  15. 01背包问题解法及优化
  16. LeetCode1456——定长子串中元音的最大数目
  17. 2021年全球与中国飞机导航镜行业市场规模现状及企业市场份额分析
  18. 数据库 基础 与命令 逻辑思维导图
  19. C语言有必要学的很深入细致吗?
  20. html flappybird小游戏代码,原生js实现Flappy Bird小游戏

热门文章

  1. java bio例子_传统的BIO
  2. Python 对字典循环遍历的两种方式
  3. 万网m3 windows linux切换,万网主机怎么做首页内页301重定向
  4. java word另存为_Java 网页html转为word并保存为doc文件
  5. An error occured instantiating job to be executed. job-Quartz的Job无法实例化原因及解决方案总结
  6. SpringBoot异步任务, 以及带返回值的异步任务(@Async 不起作用的原因)
  7. int与bigdecimal的相互转换
  8. vuecli3 配置多个代理
  9. 将本地项目上传到gitLab操作
  10. 使用git上传项目到github