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是添加列的正确方法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |