4

Исходя из R, я привык легко выполнять операции над столбцами. Есть ли простой способ взять эту функцию, что я написал в СкалеПрименение функции к Spark Dataframe Column

def round_tenths_place(un_rounded:Double) : Double = { 
    val rounded = BigDecimal(un_rounded).setScale(1, BigDecimal.RoundingMode.HALF_UP).toDouble 
    return rounded 
} 

и применить его к одной колонке с dataframe - вроде того, что я надеялся, что это будет делать:

bid_results.withColumn("bid_price_bucket", round_tenths_place(bid_results("bid_price"))) 

Я не нашел легкого пути и изо всех сил пытаюсь понять, как это сделать. Там должен быть более простой способ, чем преобразовать dataframe в и RDD, а затем выбрать из rdd строк, чтобы получить правильное поле и сопоставить функцию по всем значениям, да? А также что-то более сжатое создание таблицы SQL, а затем выполнение этого с помощью sparkSQL UDF?

+0

http://stackoverflow.com/questions/29109916/updating-a-dataframe-column-in-spark –

ответ

11

Вы можете определить UDF следующим образом:

val round_tenths_place_udf = udf(round_tenths_place _) 
bid_results.withColumn(
    "bid_price_bucket", val round_tenths_place_udf($"bid_price")) 

хотя встроенный Round expression использует точно такую ​​же логику в качестве функции и должны быть более чем достаточно, не говоря уже о гораздо более эффективным:

import org.apache.spark.sql.functions.round 

bid_results.withColumn("bid_price_bucket", round($"bid_price", 1)) 

Смотрите также:

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