Apache Spark中的转换和操作

时间:2015-06-09 06:28:33

标签: scala hadoop apache-spark hdfs

我有scala代码,它使用通配符从HDFS获取多个输入文件,每个文件都进入一个函数,每个文件都单独进行处理。

import de.l3s.boilerpipe.extractors.KeepEverythingExtractor

    val data = sc.wholeTextFiles("hdfs://localhost:port/akshat/folder/*/*")

    val files = data.map { case (filename, content) => filename}


    def doSomething(file: String): (String,String) = { 


     // logic of processing a single file comes here

     val logData = sc.textFile(file);
     val c = logData.toLocalIterator.mkString
     val d = KeepEverythingExtractor.INSTANCE.getText(c)
     val e = sc.parallelize(d.split("\n"))
     val recipeName = e.take(10).last
     val prepTime = e.take(18).last

     (recipeName,prepTime)
    }

    //How transformation and action applied here?

我坚持如何应用进一步的转换和操作,以便根据函数doSomething映射我的所有输入文件,并使用saveAsTextFile将每个输入文件的所有输出存储在一个文件中。

1 个答案:

答案 0 :(得分:1)

因此,如果我的理解是正确的,那么你有一个RDD对,你希望对它进行一些转换,然后将每个键的输出保存到一个唯一的文件中。将它转换为相对容易的,mapValue将允许您仅对值进行转换,以及任何其他转换将对对的RDD起作用。

然而,将输出保存为每个键的唯一文件有点棘手。一种选择是尝试找到一个hadoopoutput格式,它可以做你想要的,然后使用saveAsHadoopFile,另一种选择是使用foreach,然后只需编写代码输出每个键/值对期望的。