2017-01-04 4 views
1

Я обрабатываю Dataset<Row> в Apache Spark с помощью Java и должен выполнить пару математических преобразований по всем столбцам в этом наборе данных. В основном одно из преобразований - получить журнал всех значений, хранящихся в этом наборе данных, и все еще возвращать Dataset<Row>. Я ясно вижу, как это сделать в функции map в RDD, но как я могу это сделать в Dataset<Row>?Применение преобразований в наборе данных Apache Spark

Контекст: Dataset<Row> old содержит 2 колонки a и b. Я хочу, чтобы вернуть новый Dataset<Row> new с обеими колоннами a = log(a) и b = log(b)

+1

Пожалуйста, объясните более подробно, что вы пытаетесь сделать, что вы делали до сих пор и т.д. Dataset имеет множество функций, которые могут быть использованы. –

ответ

1

, что вы можете сделать, это вы можете создать метод, который принимает значение типа а [столбец] и [б] столбца в качестве параметра и возвращаете значение лога.

предположим, что столбец а и столбец Ь типа длиной

public long getLog(long value){ 
// yourlogic to generate log 
} 

затем применить функцию отображения над набором данных. В функции map вы получите значение типа , примените метод getLong/getAs(), чтобы получить соответствующее значение, затем передайте это значение своему пользовательскому методу вычисления лога, т.е. getLog в нашем случае, затем верните результирующее значение.

вам, возможно, придется вернуть Tuple2 как для значения а и б колонке

Или вы можете создать udf пользователя определить функцию spqrk SQL затем применить withcoumn метод применить udf

ПРИМЕЧАНИЕ UDF будет принимать значение типа a [column] и b [column] в качестве аргумента и вернуть значение журнала.

Надежда это отлично работает

Смежные вопросы