2016-11-27 63 views
1

我有一个包含多个网址的文件。 我想阅读每个这个网址,并对其进行一些处理。 由于处理部分是独立的每个网址,我想在Spark上并行执行此操作。如何在Spark中使用java平行处理每行文件?

SparkConf conf = new SparkConf().setAppName("org.sparkexample.WordCount").setMaster("local"); 
JavaSparkContext context = new JavaSparkContext(conf); 
JavaRDD<String> textFile = context.textFile("urlFile"); 
/* Now for each line of this textFile I need to call below */ 

ExtractTrainingData ed = new ExtractTrainingData(); 
List<Elements> list = ed.getElementList(inputUrl); 
ed.processElementList(inputUrl, list); 

任何人都可以建议我该怎么做?

+1

什么样的你想对文本文件进行处理吗?我在猜测是否会通过网址发送http请求?你想在一个rdd请求结果吗? –

回答

1

如果每个URL是在其他行,那么你可以做的foreach:

SparkConf conf = new SparkConf().setAppName("org.sparkexample.WordCount").setMaster("local"); 
JavaSparkContext context = new JavaSparkContext(conf); 
JavaRDD<String> textFile = context.textFile("urlFile"); 

textFile.foreach (new VoidFunction<String>() { 
    public void call (String line) { 
     // this code will be executed parallely for each line in file 
     ExtractTrainingData ed = new ExtractTrainingData(); 
     List<Elements> list = ed.getElementList(inputUrl); 
     ed.processElementList(inputUrl, list); 
    } 
}); 

如果结果列表也应并行,则:

SparkConf conf = new SparkConf().setAppName("org.sparkexample.WordCount").setMaster("local"); 
JavaSparkContext context = new JavaSparkContext(conf); 
JavaRDD<String> textFile = context.textFile("urlFile"); 

textFile.map (new Function<String, List<Elements>() { 
    public List<Elements> call (String line) { 
     // this code will be executed parallely for each line in file 
     ExtractTrainingData ed = new ExtractTrainingData(); 
     List<Elements> list = ed.getElementList(inputUrl); 
     return list; 
    } 
}).flatMap (list -> list.iterator()) 
.foreach ((String element) -> { 
    // here put code that is in processElementList 
}); 

我用lambda语法,你可以使用,当然匿名函数

编辑:确保Elements是序列化

+0

此作品谢谢。有没有办法,但要找出代码真的并行运行?其实我的ed.processElementList(inputUrl,列表); – ysg7790

+0

你将不得不提供更多关于ExtractTrainingData内部的代码。 –

+0

如果它有效,并且你没问题,那么你可以投票/接受作为所有者的问题。如果你没有足够的previlage然后至少请接受 –

相关问题