我在HDFS上保存了一些java对象,供各种火花作业使用。我知道对于本地文件系统,我们可以使用ObjectInputStream
类反序列化。但到目前为止,我无法使用spark在远程文件系统(HDFS?)上找到任何方法。
更新:spark context有一个api:objectFile
来获取一个对象。对象可以收集为: -
JavaRDD<Map<Long, BloomFilter>> obj = context.objectFile("/user/hdfs/path");
dat = obj.collect().get(0);
但现在我遇到了相关的问题。 dat
对象将仅由节点填充以接收RDD。但是这些数据需要被spark中的所有节点使用。我知道有一个Broadcast
函数,但这意味着将我的数据传送到所有节点,并且数据量非常大将无法实现map reduce的目的。有没有更好的方法在火花环境中反序列化和分发对象。
答案 0 :(得分:0)
在Spark中,SparkContext
通常用于以分布式方式读取数据,Spark应该为您处理反序列化。特别是方法objectFile
看起来可能有所帮助。
解释在HDFS中编写文件here。