为火花 scala 中的每条记录生成唯一的顺序代理项 Key



>我在生成唯一的顺序代理键以替换表列中的空值时遇到困难。该表是在连接源表和引用表后获得的,该列是结果表的主键列("account_key"(,其中空值应替换为唯一的序列键。生成的唯一键应以分配给源的数字开头,并且应为每个 null 值递增该数字。我尝试了以下方法

    var uniqueId = Table_NO.agg(max("No"))
// var uniqueID = 6000001 (for example)
//or a SQL statement can be written as "var uniqueId = sqlContext.sql(SELECT MAX (NBR) FROM Table"
    var a = sc.accumulator(uniqueID)
    def generate(s:Int):Int = {
        if (s==0)
        {
            a = a.add(1)
            return a.localValue
        }
        else
        {
            return s
        }
val NumGen = udf(generate(_:Int))
val KeyGen = table_n.withColumn("KEY_New", NumGen(table_n ("account_key")))

我认为你可以只使用窗口函数,根据您的版本,它可能看起来像这样......

import org.apache.spark.sql.expressions._
import org.apache.spark.sql.functions._
import org.apache.spark.sql.types._
val incrementbyOne = Window.partitionBy(lit("C")).orderBy(lit("C").asc)
    table_n.withColumn("identity_column", row_number().over(incrementbyOne))

相关内容

  • 没有找到相关文章

最新更新