В приведенном ниже фрагменте кода 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.
numAs
уже является встроенным RDD. У вас есть два варианта:
numAs
RDD, используя операции RDD"собирать" содержимое RDD в массив и работать с ним:
val content = numAs.collect
Швабра (содержание)
Вариант № 1 будет продолжать использовать распределенную инфраструктуру Spark и должен быть способ использовать большие массивы данных.
Вариант № 2 будет собирать данные RDD у драйвера в виде массива. Данные должны вписываться в память драйвера. Результирующий массив - это просто обычный массив JVM с содержимым того же типа, что и исходный RDD, и вы можете использовать на нем все поддерживаемые функции Scala.