#scala #apache-spark
Вопрос:
Как реализовать сложное преобразование настраиваемым способом . Я получаю данные в файле, скажем, csv, avro и т. Д., Которые останутся прежними, и благодаря этому я создам фрейм данных, Теперь мне нужно написать другую функцию, имеющую другую логику преобразования. используя spark scala, который будет применен к фрейму данных . На основе параметра , который мы передаем с помощью файла конфигурации, конкретная функция будет выполнена с требуемым преобразованием
Параметр, который мы будем передавать через конфигурацию, которая выберет соответствующую функцию, Любые входные данные для реализации этого, пожалуйста
Ответ №1:
Это можно сделать с помощью transform
функции в spark.
Начните с определения функций для выполнения преобразований.
import org.apache.spark.sql.functions._
import org.apache.spark.sql.DataFrame
def addOne(df: DataFrame) = {
df.withColumn("plusOne", df("col") 1)
}
def addTwo(df: DataFrame) = {
df.withColumn("plusTwo", df("col") 2)
}
Затем определите тестовый фрейм данных
val test = (1 to 10).toDF("col")
test.show(3, false)
/* outputs:
---
|col|
---
|1 |
|2 |
|3 |
---
*/
Затем используйте функцию «преобразование», чтобы выполнить фактические преобразования на основе вашего параметра в конфигурации.
val parameter = 1
val result1 = parameter match {
case 1 => test.transform(addOne)
case 2 => test.transform(addTwo)
}
result1.show(3, false)
/*
--- -------
|col|plusOne|
--- -------
|1 |2 |
|2 |3 |
|3 |4 |
--- -------
*/
В случае parameter
, если это другое значение, вы можете увидеть, как оно будет вести себя ниже.
val parameter = 2
// below code can be extracted into a function
val result2 = parameter match {
case 1 => test.transform(addOne)
case 2 => test.transform(addTwo)
}
result2.show(3, false)
/*
Outputs:
--- -------
|col|plusTwo|
--- -------
|1 |3 |
|2 |4 |
|3 |5 |
--- -------
*/