加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在Spark Dataframe中创建具有函数的新列

发布时间:2020-12-16 09:41:09 所属栏目:安全 来源:网络整理
导读:我想在Spark中找出新的数据帧API。似乎是向前迈出了一大步,但在做某些应该很简单的事情上遇到麻烦。我有一个包含2列“ID”和“金额”的数据框。作为一个通用示例,比方说,我想返回一个名为“code”的新列,该列基于“Amt”的值返回一个代码。我可以写一个
我想在Spark中找出新的数据帧API。似乎是向前迈出了一大步,但在做某些应该很简单的事情上遇到麻烦。我有一个包含2列“ID”和“金额”的数据框。作为一个通用示例,比方说,我想返回一个名为“code”的新列,该列基于“Amt”的值返回一个代码。我可以写一个这样的功能:

def coder(myAmt:Integer):String {
  if (myAmt > 100) "Little"
  else "Big"
}

当我尝试使用它:

val myDF = sqlContext.parquetFile("hdfs:/to/my/file.parquet")

myDF.withColumn("Code",coder(myDF("Amt")))

我得到类型不匹配错误

found   : org.apache.spark.sql.Column
required: Integer

我已经尝试将我的函数的输入类型更改为org.apache.spark.sql.Column,但是随后我开始获取wrrors的功能编译,因为它在if语句中需要一个布尔值。

我这样做错了吗?有没有更好的/另一种方法来做这个比使用column?

谢谢你的帮助。

解决方法

假设您的架构中有“Amt”列:

import org.apache.spark.sql.functions._
val myDF = sqlContext.parquetFile("hdfs:/to/my/file.parquet")
val coder: (Int => String) = (arg: Int) => {if (arg < 100) "little" else "big"}
val sqlfunc = udf(coder)
myDF.withColumn("Code",sqlfunc(col("Amt")))

我认为withColumn是添加列的正确方法

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读