Есть ли способ записи строк RDD в HDFS или S3 из преобразования карты? - PullRequest
0 голосов
/ 10 апреля 2019

Мне известно, что типичным способом записи строк RDD или Dataframe в HDFS или S3 является использование saveAsTextFile или df.write. Тем не менее, я хотел бы выяснить, как записывать отдельные записи внутри преобразования карты, например:

myRDD.map(row => {
  if(row.contains("something")) {
    // write record to HDFS or S3
  }
  row
}

Я знаю, что это можно сделать с помощью следующего кода,

val newRDD = myRDD.filter(row => row.contains("something"))
newRDD.saveAsTextFile("myFile")

но я хочу продолжить обработку исходного myRDD после записи в HDFS, и для этого потребуется кэширование myRDD, а у меня недостаточно ресурсов памяти.

1 Ответ

1 голос
/ 10 апреля 2019

Я хочу продолжить обработку исходного myRDD после записи в HDFS, что потребует кэширования myRDD, и у меня недостаточно ресурсов памяти.

Вышеприведенное утверждение неверно.Вы можете работать с RDD дальше без кеширования, если у вас мало памяти.

Вы можете писать внутри функции map(), используя Hadoop API, но не рекомендуется использовать действия терминала внутри map()функция.map() операции не должны иметь побочных эффектов.Однако вы можете использовать функцию mappartition().

Вам не нужно кэшировать RDD для выполнения последующих операций над ним.Кэширование помогает избежать повторного вычисления, но RDD являются неизменяемыми.Новый RDD будет создаваться (сохраняя родословную) при каждом преобразовании.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...