从对象访问数据而不是使用saveAsTextFile保存它

时间:2014-09-24 11:38:55

标签: java scala apache-spark

在下面的代码片段中,saveAsTxtFile会以逗号分隔格式将其写入文件。 相反,我希望将内存中的数据作为对象并进行操作。

val logFile = "/tmp/master.txt"
val positive = "/tmp/positive.txt"
val negative = "/tmp/negative.txt"

val sc = new JavaSparkContext("local[4]", "Twitter Analyzer", "/siva/spark-1.1.0/",Array("target/scala-2.10/Simple-assembly-0.1.0.jar"))

val twitterFeed = sc.textFile(logFile).cache()

  val value = iterator.next()
  val numAs =  twitterFeed.filter((i: String) => i.contains(value))

  numAs.saveAsTextFile("/tmp/output/positive/" + value)

所以问题是,我如何使用变量numAs中的值? 说文件内容是

a,b,1,2
c,d,3,4

我想做一些特定于a,b和c,d的工作。

1 个答案:

答案 0 :(得分:2)

numAs已经是内存中的RDD。您有两种选择:

  1. 使用RDD operations
  2. 继续处理numAs RDD的内容
  3. 将RDD的内容“收集”到一个数组中并对其进行操作:

    val content = numAs.collect

    拖把(内容)

  4. 选项#1 将继续利用分布式Spark基础架构,应该成为大型数据集的一种方式。

    选项#2 将在驱动程序中收集RDD数据作为数组。数据必须适合驱动程序内存。生成的数组只是一个普通的JVM数组,其内容与源RDD的内容相同,您可以使用它上面支持的所有Scala函数。