我在生成唯一的顺序代理键以替换表的列中的空值时遇到困难。该表是在连接源表和引用表之后获得的,并且该列是结果表的主键列(“account_key”),其中空值应该用唯一序列键替换。 生成的唯一键应以分配给源的编号开头,并且应为每个空值递增编号。 我尝试了以下
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")))
答案 0 :(得分:0)
我认为您可以使用窗口函数,具体取决于您的版本,它可能看起来像这样......
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))