0
表の列のNULL値を置き換える固有の順序番号の生成が困難になっています。この表は、他の2つの表を結合した後に取得され、列IDは、NULL値が一意の順序値で置き換えられる主キー列です。 私はアキュムレータを使用しようとしましたが、プログラムをマルチノードクラスタで実行する際に問題が発生しています。スパーク・スカラの表の列のNULL値を置き換える一意の順序番号の生成方法
val joined=csv2.join(csv,csv2("ACCT_PRDCT_CD")===csv("ACCT_PRDCT_CD"),"left_outer")
joined.filter("ACCT_CO_NO is null").show
val k=joined.withColumn("Acc_flag", when($"ACCT_CO_NO".isNull,0).otherwise($"ACCT_CO_NO"))
var a=1
def generate(s:Int):Int={
if (s==0){
a=a+1
return a
}
else {
return s
}
}
val generateNum = udf(generate(_:Int))
val newjoined=k.withColumn("n",generateNum($"ACC_flag"))
感謝レオ質問に答えるために。 – RSG
私の要件は、いくつかのランダムな値ではなく、シーケンシャルユニークな値を生成する必要があります。私は、初期値をインクリメントするためのアキュムレータを使用し、得られた出力が不安定な値でない配列である、あなたの提案appreciated.Iが= 6000001 以下のコードVARのユニークIDを使用さ\tするvar A = sc.accumulator(ユニークID) \t DEF生成します(S:INT):のInt = { \t \t(S == 0) \t \t { \t \t \t = a.add(1) \t \t \t戻りa.localValue \t \t}場合他\t \t \t \t { \t \t \tリターンS \t \t} \t \tヴァルジェナム= UDF(生成(_:INT)) \tヴァルkeygenの= table_n.withColumn( "Key_New"、ジェナム(table_n ( "record_status"))) – RSG
この式はETLツールで見つかりましたが、Sparkでこれを実装することはできません。 (next_in_sequence()* number_of_partitions()+ this_partition()+ 1 -number_of_partitions())+ $ {最大シーケンス番号}あなたの提案は高く評価されています – RSG