如何使用scala在集群模式下在spark中查找特定记录?

时间:2015-10-09 15:50:33

标签: scala apache-spark

我有一个像这样的简单csv,但它有100万条记录:

Name, Age
Waldo, 5
Emily, 7
John, 4
Amy Johns, 2
Kevin, 4
...

我想找一个名字叫#Amy Johns"的人。我有一个10台机器的火花簇。假设rdd包含csv的RDD,我怎样才能利用集群以便我能够......

  1. 拆分工作,使10台机器中的每台机器都处理原始巨型机组的十分之一。
  2. 当Amy Johns"第一次出现时找到并输出到控制台,作业完成。 (例如,如果机器#4找到" Amy Johns",所有其他机器应停止查看并输出结果)
  3. 我的代码现在正好:rdd = sc.textFile

    然后它执行rdd.foreach( // checks if field is "Amy Johns", if so, then exits)

    我遇到的问题是rdd包含所有记录(如果不是这样,请说出来)所以我不认为正在分发工作。 此外,我不知道如何完成/停止工作一次" Amy Johns"找到了。

1 个答案:

答案 0 :(得分:0)

凭借其定义,您的RDD确实包含所有记录。您可以将RDD拆分为多个分区,以增加计算的并行化。此外,在分区之后,您可以在RDD上应用转换以根据某些条件过滤元素。

你可能想尝试这样的事情:

val myRDD = sc.textFile(_inputPath_, 10)
val filteredRDD = myRDD.filter(line => line.split(",")(0).equals("Amy Johns"))
filteredRDD.first.foreach(println)