繁体   English   中英

将函数应用于 Spark Dataframe 列

[英]Applying function to Spark Dataframe Column

来自 R,我习惯于轻松地对列进行操作。 有没有什么简单的方法可以使用我用 Scala 编写的这个函数

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

并将其应用于数据框的一列 - 我希望这会做什么:

 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", round_tenths_place_udf($"bid_price"))

尽管内置Round表达式使用与您的函数完全相同的逻辑,并且应该绰绰有余,更不用说效率更高了:

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

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

另请参阅以下内容:

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM