Безопасно ли определять преобразования Spark в функции и возвращать новый фрейм данных в BigData? - PullRequest
0 голосов
/ 22 января 2019

У меня есть датафрейм df1. Я планирую разделить его на два кадра данных - df2 и df3. Существующий поток кода имеет ПОЧТИ одинаковую последовательность преобразований. Поэтому я хочу определить все эти наборы преобразований в функции, которая принимает информационный кадр, выполняет эти преобразования и возвращает преобразованный информационный кадр.

Так безопасно ли использовать такой подход (особенно с BigData) ИЛИ просто повторить одно и то же преобразование последовательности два раза для обоих кадров данных df2 и df3 (это увеличит код)?

Ответы [ 3 ]

0 голосов
/ 22 января 2019

Вы можете использовать метод .transform().

Он существует в API DataFrame со следующей подписью:

def transform[U](t: (DataFrame) ⇒ DataFrame): DataFrame`

и в API набора данных (DataFrame является псевдонимом набора данных [Row] с 2.2.0:

def transform[U](t: (Dataset[T]) ⇒ Dataset[U]): Dataset[U]

Таким образом, вы можете определить метод:

def mytransformation(inputDF:DataFrame):DataFrame = { 
  //transformationgo there 
  // val ouputDF = inputDF.map(...).filter(...) 
  outputDF 
}

или функция:

val mytransformation:DataFrame => DataFrame = inputDF => {  
  // val ouputDF = inputDF.map(...).filter(...)
  outputDF 
}

Затем вы можете передать mytransformation в метод transform в качестве аргумента

0 голосов
/ 22 января 2019

Нет проблем, и это никак не повлияет на вашу производительность.Spark не запускает ваш код напрямую.Он генерирует план на основе определенных вами преобразований.Они будут такими же, если вы сделаете их в функции или продублируете свой код

0 голосов
/ 22 января 2019

Если я хорошо понимаю, это нормально для определения метода, который группирует несколько методов, вы можете заинтересоваться методом andThen для чистого кода, если вам нужно применить много методов

https://www.scala -lang.org / апи / ток / Скала / Function1.html

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