如何使用udf函数从Dataframe中删除特殊字符

mspsb9vt  于 2021-05-18  发布在  Spark
关注(0)|答案(1)|浏览(517)

我是spark sql的学习者。有人能帮我解决下面的问题吗?
包名称:sparksql,类name:custommethod,方法name:removespecialchar
在scala中创建一个自定义方法,该方法接受1个字符串作为参数,1个字符串类型的返回值
方法必须删除所有特殊字符数字0到9-?,/\()[]使用replaceall函数从dataframe返回一列。输入:windows-x64(操作系统)输出:windows x操作系统
我有一个名为df1的Dataframe,在另一个名为sparksql2的类中有6列
3.导入包,示例化sparksql2类中的custommethod方法,将上述步骤生成的方法注册为调用sparksql dataframe的自定义项。
通过传递single columnname作为参数来调用dsl中的上述udf,以从dataframe中删除特殊字符,并将结果作为json保存到hdfs位置

wtzytmuj

wtzytmuj1#

您不需要自定义项,只需使用纯spark并在带有regexp\u replace的函数中定义它即可。
举个例子:

import org.apache.spark.sql.{SparkSession,DataFrame}
import org.apache.spark.sql.functions.regexp_replace

def removeFromColumn(spark: SparkSession, columnName: String, df: DataFrame) =
      df.select(regexp_replace(
         df(columnName), 
         "[0-9]|\\[|\\]|\\-|\\?|\\(|\\)|\\,|_|/", 
         ""
      ).as(columnName))

有了它,您就可以在Dataframe上使用它,而无需注册自定义项:

import spark.implicits._

val df = Seq("2res012-?,/_()[]ult").toDF("columnName")

removeFromColumn(spark, "columnName", df)

输出:

+----------+
|columnName|
+----------+
|    result|
+----------+

相关问题