使用udf函数删除DataFrame字段中的换行符会产生TypeTag错误

时间:2017-05-11 15:02:33

标签: scala apache-spark spark-dataframe udf

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))    ... 
}

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

  

没有TypeTag可用于String

此错误是我定义udf函数的地方。我不知道为什么会这样。我之前使用过udf函数,但是这个函数出现了这个错误。我使用Spark 2.1.1,就是这样。

代码的目的是删除我的一个StringType字段中的所有新行,我只是希望它没有任何换行符

1 个答案:

答案 0 :(得分:1)

您是否有使用UDF而不是内置replace_regexp的原因?

val fixed_dblogs_df = df.withColumn("qp_new", replace_regexp('qp, "[\\r\\n]", "") ...)

UDF打破了Spark的计划优化。