Scala RDD вызывает функцию фильтра условно - PullRequest
0 голосов
/ 21 апреля 2020

У меня есть общая функция c для чтения RDD и генерации Dataframe. Я вызову эту функцию дважды, один с фильтром, другой без. Есть ли способ сделать мою функцию более элегантной?

def generateDF(rawdata: Type, applyFilter: Boolean): DataFrame = {
  val rdd = if(applyFilter == true) {
          sc.sequenceFile[Array[Byte], String](rawdata)
              .values
              .filter(filterCondition)
              .map(parser.parseData)
              .map(addColumnFunction)    

        } else{
           sc.sequenceFile[Array[Byte], String](rawdata)
             .values
             .map(parser.parseData)
             .map(addColumnFunction)
        }

  createDataFrame(rdd, outputFieldNames)  
}

Вызов функции:

val dfWithFilter    = generateDF(rawdata, true)
val dfWithoutFilter = generateDF(rawdata, false)

Я новичок в Scala, вышеупомянутая функция работает как задумано, но я хотел бы узнать больше передовых методов против вышеупомянутых ситуация. Например, как я могу написать весь этот блок кода только один раз, а не повторять его?

 sc.sequenceFile[Array[Byte], String](rawdata)
   .values
   .map(parser.parseData)
   .map(addColumnFunction)

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 21 апреля 2020
   val rdd0 = sc.sequenceFile[Array[Byte], String](rawdata)
    .values
    .map(parser.parseData)
    .map(addColumnFunction)

  val rdd = if(applyFilter == true) {
    rdd0.filter(filterCondition)
  } else { rdd0 }

  createDataFrame(rdd, outputFieldNames)
...