Scala 使用udf函数删除DataFrame字段中的换行符会导致TypeTag错误
运行此代码时,会出现编译时错误: 没有可用于字符串的TypeTag 这个错误是我定义udf函数的地方。我不知道为什么会这样。我以前使用过udf函数,但这一个正在犯这个错误。我用了Spark 2.1.1,就这样Scala 使用udf函数删除DataFrame字段中的换行符会导致TypeTag错误,scala,apache-spark,spark-dataframe,udf,Scala,Apache Spark,Spark Dataframe,Udf,运行此代码时,会出现编译时错误: 没有可用于字符串的TypeTag 这个错误是我定义udf函数的地方。我不知道为什么会这样。我以前使用过udf函数,但这一个正在犯这个错误。我用了Spark 2.1.1,就这样 代码的目的是删除我的一个StringType列字段中的所有新行,我只希望其中没有任何新行您使用UDF而不是replace\u regexp内置的原因是什么 val trim: String => String = _.trim.replace("[\\r\\n]", "") def
代码的目的是删除我的一个StringType列字段中的所有新行,我只希望其中没有任何新行您使用UDF而不是
replace\u regexp
内置的原因是什么
val trim: String => String = _.trim.replace("[\\r\\n]", "")
def main(args: Array[String]) {
val spark = ... ...
import spark.implicits._
val trimUDF = udf[String,String](trim)
val df = spark.read.json(df_path) ...
val fixed_dblogs_df = df.withColumn("qp_new", trimUDF('qp)) ...
}
UDF的break Spark计划优化。请给出一个可复制的示例您将函数定义为
trim
,但在UDF中,您使用的是betterTrimmer
?抱歉,为了使其可读,我删除了一些行,并重命名了一些变量。我正在读取一个数据帧,它有一个字符串类型的字段,我只想删除该字符串字段中的行尾。我还修复了我删除的微调功能betterTrimmer。很抱歉造成混淆谢谢你的回答,我会测试它,但我不明白为什么udf会给我这个错误,特别是因为在这之后,我使用udf进行了更多的操作,以从该字符串中提取架构。你有没有关于udf破坏优化的参考资料,以及列操作的正确方式是什么?来自Cloudera博客:“Spark SQL的另一个重要组件是Catalyst查询优化器。它的功能随着每个版本的发布而不断扩展,通常可以提供显著的性能改进来激发SQL查询;然而,Catalyst可能无法很好地理解任意UDF实现代码(尽管正在考虑将来分析字节码的功能来解决这个问题)。因此,使用Spark的内置SQL查询函数通常会获得最佳性能,并且应该是在可以避免引入UDF时考虑的第一种方法?
val fixed_dblogs_df = df.withColumn("qp_new", replace_regexp('qp, "[\\r\\n]", "") ...)