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