Я обробляю a Dataset<Row>
в Apache Spark з використанням Java і потрібно зробити aпара математичних перетворень над усіма колонками цього набору даних. В основному одне з перетворень полягає в тому, щоб отримати журнал усіх значень, що зберігаються в даному наборі даних, і все ще повертаються Dataset<Row>
. Я чітко бачу, як це зробити в a map
функція в RDD, але як я можу це зробити в a Dataset<Row>
?
Контекст: Dataset<Row> old
містить 2 стовпці a
і b
. Я хочу повернути нову Dataset<Row> new
з обома колонками a = log(a)
і b = log(b)
Відповіді:
1 для відповіді № 1що ви можете зробити, це можна створити метод, який приймає значення типу a [column] і b [column] як параметр і повертає значення журналу.
Припустимо, що стовпчик a і стовпець b мають довгий характер
public long getLog(long value){
// yourlogic to generate log
}
потім застосуйте функцію карти над набором даних. Під функцією map ви отримаєте значення як тип Row
застосувати getLong/getAs()
Метод, щоб отримати відповідне значення, потім передайте це значення у ваш метод обчислення журналів, тобто. getLog
у нашому випадку повернемо результуюче значення.
вам може знадобитися повернутися Tuple2
для обох значень a та b колонці
Або ви можете створити udf
користувач визначає функцію spqrk sql потім застосувати withcoumn
метод застосовувати udf
ПРИМІТКА udf візьме значення типу a [стовпчик] і b [column] як аргумент і повертає значення журналу.
Сподіваюся, що це добре