如何规范化 spark (scala) 中的列中的全角字符

Posted

技术标签:

【中文标题】如何规范化 spark (scala) 中的列中的全角字符【英文标题】:How can I normalize full-width characters in column in spark (scala) 【发布时间】:2020-12-02 05:52:46 【问题描述】:

我在数据框中有一列包含全角和半角字符。我想将列规范化为半角字符,但我不确定它是如何完成的。

我正在尝试这样做:

var normalized = df.withColumn("DomainNormalized",col(Normalizer.normalize($"Domain".toString(), Normalizer.Form.NFKC)))

我希望这会改变这个域:@nllb.com(注意 b 是全角字符)到@nlb.com,但创建的列未标准化。

如何使用 java 规范化器更改列内容或在数据框上派生新列?

【问题讨论】:

【参考方案1】:

像这样使用udf

....
val rdd = sc.makeRDD(List("@nl 1.com")) 
import sparkSession.implicits._
val df = rdd.toDF("domain") 
val norm = (arg:String) => 
  val s = Normalizer.normalize(arg,Normalizer.Form.NFKC)
  s

val normalizer = udf(norm)
val df2 = df.withColumn("domain2",normalizer(df.col("domain")))
df2.select("domain2").show()

【讨论】:

以上是关于如何规范化 spark (scala) 中的列中的全角字符的主要内容,如果未能解决你的问题,请参考以下文章

过滤包含Scala Spark数据帧中数组的列中的数组长度[重复]

Spark Scala:如何转换 DF 中的列

Scala(Spark)连接数据框中的列[重复]

如何将行数据转置/旋转到 Spark Scala 中的列? [复制]

Spark Scala 根据另一个 RDD 的列删除一个 RDD 中的行

更改 Spark GraphFrame 中的字符串列