通过UDF、Spark-Scala加密CSV列

通过UDF、Spark-Scala加密CSV列,scala,apache-spark,Scala,Apache Spark,我正在尝试加密我的CSV文件中的一列。我正在尝试使用UDF来实现这一点。但我得到了编译错误。这是我的密码: import org.apache.spark.sql.functions.{col,udf} val upperUDF1=udf{str:String=>Encryptor.aes(str)} val rawDF=火花 阅读 .格式(“csv”) .选项(“标题”、“正确”) .load(输入路径) rawDF.withColumn(“id”,upperUDF1(“id”)).show(

我正在尝试加密我的
CSV
文件中的一列。我正在尝试使用UDF来实现这一点。但我得到了编译错误。这是我的密码:

import org.apache.spark.sql.functions.{col,udf}
val upperUDF1=udf{str:String=>Encryptor.aes(str)}
val rawDF=火花
阅读
.格式(“csv”)
.选项(“标题”、“正确”)
.load(输入路径)
rawDF.withColumn(“id”,upperUDF1(“id”)).show()//编译错误。
我在最后一行得到了编译错误,我使用了错误的语法。提前谢谢。

您应该发送一个
而不是
字符串
,您可以通过不同的语法引用列:

$“”
列(“”)
所以你应该试试这个:

rawDF.withColumn("id", upperUDF1($"id")).show()
或者这个:

rawDF.withColumn("id", upperUDF1(col("id"))).show()

就我个人而言,我最喜欢美元语法,对我来说似乎更优雅

除了来自SCouto的答案之外,您还可以通过以下方式将您的udf注册为Spark SQL函数

spark.udf.register(“upperUDF2”,upperUDF1)
随后的select表达式可能如下所示

rawDF.selectExpr(“id”,“upperUDF2(id)”).show()