/ / Stosowanie transformacji w Dataset Apache Spark - java, apache-spark, spark-dataframe

Stosowanie transformacji w Dataset Apache Spark - java, apache-spark, spark-dataframe

Zajmuję się a Dataset<Row>w Apache Spark używa Java i trzeba zrobićkilka przekształceń matematycznych we wszystkich kolumnach w tym zestawie danych. Zasadniczo jedną z transformacji jest uzyskanie dziennika wszystkich wartości przechowywanych w tym zestawie danych i wciąż zwracanych Dataset<Row>. Widzę jasno, jak to zrobić w a map funkcja w RDD, ale jak mogę to zrobić w a Dataset<Row>?

Kontekst: Dataset<Row> old zawiera 2 kolumny a i b. Chcę zwrócić nowy Dataset<Row> new z obu kolumn a = log(a) i b = log(b)

Odpowiedzi:

1 dla odpowiedzi № 1

możesz zrobić metodę, która przyjmuje wartość typu [kolumna] i b [kolumna] jako parametr i zwróć wartość logu.

przypuśćmy, że kolumna a i kolumna b są typu long

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

następnie zastosuj funkcję mapy do zestawu danych. W funkcji map otrzymasz wartość jako typ Row zastosuj getLong/getAs() Aby uzyskać odpowiednią wartość, należy przekazać tę wartość do niestandardowej metody obliczania dzienników, np. getLog w naszym przypadku następnie zwróć wartość wynikową.

być może będziesz musiał wrócić Tuple2 zarówno dla wartości a, jak i dla kolumny b

Lub możesz stworzyć udf zdefiniować funkcję spqrk sql, a następnie zastosować withcoumn metoda do zastosowania udf

UWAGA udf przyjmie wartość typu a [kolumna] i b [kolumna] jako argument i zwróci wartość logu.

Mam nadzieję, że to działa dobrze