>我在生成唯一的顺序代理键以替换表列中的空值时遇到困难。该表是在连接源表和引用表后获得的,该列是结果表的主键列("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))