在下面的代码片段中,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的工作。
答案 0 :(得分:2)
numAs
已经是内存中的RDD。您有两种选择:
numAs
RDD的内容
将RDD的内容“收集”到一个数组中并对其进行操作:
val content = numAs.collect
拖把(内容)
选项#1 将继续利用分布式Spark基础架构,应该成为大型数据集的一种方式。
选项#2 将在驱动程序中收集RDD数据作为数组。数据必须适合驱动程序内存。生成的数组只是一个普通的JVM数组,其内容与源RDD的内容相同,您可以使用它上面支持的所有Scala函数。