Rから来て、私は列の操作を簡単に行うことに慣れています。 scalaで書いたこの関数を使用する簡単な方法はありますか
def round_tenths_place( un_rounded:Double ) : Double = {
val rounded = BigDecimal(un_rounded).setScale(1, BigDecimal.RoundingMode.HALF_UP).toDouble
return rounded
}
そして、それをデータフレームの1列に適用します-私はこれが何をしたいのですか?
bid_results.withColumn("bid_price_bucket", round_tenths_place(bid_results("bid_price")) )
簡単な方法を見つけることができず、これを行う方法を見つけるのに苦労しています。データフレームをRDDに変換し、RDDの行から選択して適切なフィールドを取得し、すべての値に関数をマッピングするよりも簡単な方法が必要です。また、SQLテーブルをより簡潔に作成し、sparkSQL UDFでこれを行うこともできますか?
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))
こちらもご覧ください: