Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 使用udf函数删除DataFrame字段中的换行符会导致TypeTag错误_Scala_Apache Spark_Spark Dataframe_Udf - Fatal编程技术网

Scala 使用udf函数删除DataFrame字段中的换行符会导致TypeTag错误

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

运行此代码时,会出现编译时错误:

没有可用于字符串的TypeTag

这个错误是我定义udf函数的地方。我不知道为什么会这样。我以前使用过udf函数,但这一个正在犯这个错误。我用了Spark 2.1.1,就这样


代码的目的是删除我的一个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]", "") ...)