将两列传递给scala中的udf?
发布时间:2020-12-16 10:06:16 所属栏目:安全 来源:网络整理
导读:我有一个包含两列的数据框,一列是数据,另一列是 ?该数据字段中的字符数. Data CountHello 5How 3World 5 我想根据count列中的值更改列数据的值.怎么能实现这一目标?我用udf尝试了这个: invalidrecords.withColumn("value",appendDelimiterError(invalidrec
我有一个包含两列的数据框,一列是数据,另一列是
?该数据字段中的字符数. Data Count Hello 5 How 3 World 5 我想根据count列中的值更改列数据的值.怎么能实现这一目标?我用udf尝试了这个: invalidrecords.withColumn("value",appendDelimiterError(invalidrecords("value"),invalidrecords("a_cnt"))) 这似乎失败了,这是正确的方法吗? 解决方法
这是一种简单的方法
首先,您创建一个数据框 import sqlContext.implicits._ val invalidrecords = Seq( ("Hello",5),("How",3),("World",5) ).toDF("Data","Count") 你应该有 +-----+-----+ |Data |Count| +-----+-----+ |Hello|5 | |How |3 | |World|5 | +-----+-----+ 然后将udf函数定义为 import org.apache.spark.sql.functions._ def appendDelimiterError = udf((data: String,count: Int) => "value with error" ) 你打电话使用withColumn作为 invalidrecords.withColumn("value",appendDelimiterError(invalidrecords("Data"),invalidrecords("Count"))).show(false) 你应该输出为 +-----+-----+----------------+ |Data |Count|value | +-----+-----+----------------+ |Hello|5 |value with error| |How |3 |value with error| |World|5 |value with error| +-----+-----+----------------+ 您可以编写逻辑而不是从udf函数返回字符串 编辑 在下面的评论中回答您的要求将要求您更改udf函数和withColumn,如下所示 def appendDelimiterError = udf((data: String,count: Int) => { if(count < 5) s"convert value to ${data} - error" else data } ) invalidrecords.withColumn("Data",invalidrecords("Count"))).show(false) 你应该有输出 +----------------------------+-----+ |Data |Count| +----------------------------+-----+ |Hello |5 | |convert value to How - error|3 | |World |5 | +----------------------------+-----+ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |