2016-11-18 13 views
1

私はSpark環境を初めて使いました。私は私のプロジェクトでSpark SQLを使用します。 Spark SQLの一時テーブルに自動増分フィールドを作成したいと思います。 UDFを作成しましたが、正しく機能しませんでした。私はインターネット上でさまざまな例を試しました。これは私のJava POJOクラスです:Spark SQLテンポラリテーブルの自動インクリメントフィールドを作成

public class AutoIcrementId { 
    int lastValue; 
    public int evaluate() { 
     lastValue++; 
     return lastValue; 
    } 
} 

答えて

0

私たちは、オートインクリメントの値のためにハイブステートフルUDFを使用することができます。コードはこのようになります。

package org.apache.hadoop.hive.contrib.udf; 

import org.apache.hadoop.hive.ql.exec.Description; 
import org.apache.hadoop.hive.ql.exec.UDF; 
import org.apache.hadoop.hive.ql.udf.UDFType; 
import org.apache.hadoop.io.LongWritable; 

/** 
* UDFRowSequence. 
*/ 
@Description(name = "row_sequence", 
    value = "_FUNC_() - Returns a generated row sequence number starting from 1") 
@UDFType(deterministic = false, stateful = true) 
public class UDFRowSequence extends UDF 
{ 
    private LongWritable result = new LongWritable(); 

    public UDFRowSequence() { 
    result.set(0); 
    } 

    public LongWritable evaluate() { 
    result.set(result.get() + 1); 
    return result; 
    } 
} 

// End UDFRowSequence.java 

登録UDF:

CREATE TEMPORARY FUNCTION auto_increment_id AS 
    'org.apache.hadoop.hive.contrib.udf.UDFRowSequence' 

用途:

SELECT auto_increment_id() as id, col1, col2 FROM table_name 

同様の質問は、私はこのような何かを必要とし、ここで(How to implement auto increment in spark SQL

+0

に答えが、質問がありました、それはsc 200万のデータを持つエール。実際には、ファイルを含む正確な10K行の小さなファイルに200万行の大きなファイルを分割したいと考えています。私は、各行に自動インクリメントの数値を追加し、このような(id> 10,001とid <20,000)の助けを借りてバッチで読み込むことを考えました。この規模でうまくいくのでしょうか?お勧めします。 –

関連する問題