Получать доступ к данным из объекта, а не сохранять их с помощью saveAsTextFile

1

В приведенном ниже фрагменте кода 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.

Теги:
apache-spark

1 ответ

2
Лучший ответ

numAs уже является встроенным RDD. У вас есть два варианта:

  1. продолжите работу над содержимым numAs RDD, используя операции RDD
  2. "собирать" содержимое RDD в массив и работать с ним:

    val content = numAs.collect

    Швабра (содержание)

Вариант № 1 будет продолжать использовать распределенную инфраструктуру Spark и должен быть способ использовать большие массивы данных.

Вариант № 2 будет собирать данные RDD у драйвера в виде массива. Данные должны вписываться в память драйвера. Результирующий массив - это просто обычный массив JVM с содержимым того же типа, что и исходный RDD, и вы можете использовать на нем все поддерживаемые функции Scala.

  • 0
    Если бы я хотел перейти с вариантом 1, как бы я прочитал содержимое numAs, какую конкретную операцию следует использовать? Пример был бы очень полезным.
  • 0
    Я думаю, @massg относится к операциям карты, таким как mapPartitions или flatMap. Проверьте ( spark.apache.org/docs/latest/… ), чтобы получить больше информации об этих операциях.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню