问题 如何在Apache Spark中使用Hadoop InputFormats?


我上课了 ImageInputFormat 在Hadoop中从HDFS读取图像。如何在Spark中使用我的InputFormat?

这是我的 ImageInputFormat

public class ImageInputFormat extends FileInputFormat<Text, ImageWritable> {

    @Override
    public ImageRecordReader createRecordReader(InputSplit split, 
                  TaskAttemptContext context) throws IOException, InterruptedException {
        return new ImageRecordReader();
    }

    @Override
    protected boolean isSplitable(JobContext context, Path filename) {
        return false;
    }
}  

5795
2018-01-09 09:00


起源



答案:


SparkContext 有一个叫做的方法 hadoopFile。它接受实现接口的类 org.apache.hadoop.mapred.InputFormat

它的描述是“使用任意InputFormat获取带有Hadoop文件的RDD”。

还看看了 Spark文档


14
2018-01-09 14:15



谢谢〜我现在搞清楚了。相反,我使用newAPIHadoopFile来完成这项工作。但是我有一个新问题,这些图像都存储在hadoopRDD中,或者我可以设置RDD容量,当RDD已满时,其余数据将存储在磁盘中?如果数据太大,表现会受到影响吗?输入有500G图像。再次感谢你。 - hequn8128
对不起,我不是Spark专家。我希望别人能回答。 - Robert Metzger


答案:


SparkContext 有一个叫做的方法 hadoopFile。它接受实现接口的类 org.apache.hadoop.mapred.InputFormat

它的描述是“使用任意InputFormat获取带有Hadoop文件的RDD”。

还看看了 Spark文档


14
2018-01-09 14:15



谢谢〜我现在搞清楚了。相反,我使用newAPIHadoopFile来完成这项工作。但是我有一个新问题,这些图像都存储在hadoopRDD中,或者我可以设置RDD容量,当RDD已满时,其余数据将存储在磁盘中?如果数据太大,表现会受到影响吗?输入有500G图像。再次感谢你。 - hequn8128
对不起,我不是Spark专家。我希望别人能回答。 - Robert Metzger


图像都存储在hadoopRDD中?

是的,所有将在火花中保存的东西都是rdds

可以设置RDD容量,当RDD满时,其余数据将存储在磁盘中吗?

spark中的默认存储级别为(StorageLevel.MEMORY_ONLY),使用MEMORY_ONLY_SER,这样更节省空间。请参考spark文档> scala编程> RDD持久性

如果数据太大会影响性能吗?

随着数据量的增加,它也会影响性能。


2
2018-01-14 11:53



非常感谢你!就在刚才,我对java.lang.OutOfMemoryError:Java堆空间感到困惑。所以根据你的回复,存储级别设置可能是问题所在!我的群集有1个主服务器和11个从服务器。每个节点都有6G内存。在我的程序中,我将spark.executor.memory设置为3g。要处理的数据约为22g,包含10000个图像。再次感谢你:) - hequn8128