从spark中的单词中删除特殊字符 - scala

时间:2018-03-20 08:37:07

标签: scala apache-spark elasticsearch

我在French上有一个csv文件,其中包含一个特殊字符(é, à, è, ç)。我通过spark 2 - scala 2.11将此csv文件放在hdfs中。 我进行了数据转换,然后将我的数据帧转移到Elasticsearch 5.6。

这些特殊字符在仪表板kibana中看起来像一个奇怪的角色。

我希望用普通字母替换这些空格字符,例如:

é = e
è = e
à = a

我做到了,使用了两种可能的方法:

val urlCleaner = (joined_df2:String) => {
   if (s == null) null else s.replaceAll("é","e")
}

val newsjoined_df2=My_Dataframe.withColumn('nom_equipe', when(col('nom_equipe').equalTo('é'), 'e').otherwise(col('nom_equipe'))

但是,它不起作用。 有人可以建议我一个解决方案吗?

1 个答案:

答案 0 :(得分:1)

你可以创建一个UDF

import org.apache.spark.sql.functions
import spark.implicits._

val removeChars = functions.udf((s:String) => {
         s.replaceAll("è","e")
          .replaceAll("é","e")
          .replaceAll("à","a")
          .replaceAll("ç","c")
})

然后在您的DF中调用withColumnUDF向其发送列名:

df.withColumn("nom_equipe", removeChars($"nom_equipe"))

这是一个快速测试:

输入:

+------------+
|  nom_equipe|
+------------+
|       héllo|
|     chénene|
+------------+

输出:

+------------+
|  nom_equipe|
+------------+
|       hello|
|     chenene|
+------------+