我有一些java对象保存在HDFS上,供各种spark作业使用。我知道对于本地文件系统,我们可以使用ObjectInputStream
类来实现。但到目前为止,我无法找到任何方法在远程文件系统(HDFS?)上使用spark。
更新: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的目的。有没有更好的方法来将对象在一个Spark环境。
2条答案
按热度按时间j5fpnvbx1#
在Spark中,
SparkContext
通常用于以分布式方式读取数据,Spark应该为您处理数据的重新排序。特别是方法objectFile
看起来可能会有所帮助。在HDFS中写入文件的解释是here。
93ze6v8z2#
在Spark中,使用AlternalizeObject,让文本到ClickHouse