Мы можем использовать ульи с учетом состояния 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 миллионов. На самом деле я хочу разбить большой файл, содержащий 200 миллионов строк в меньших файлах точных 10K строк, содержащих файл. Я думал добавить число автоинкремента для каждой строки и прочитать в пакетном режиме с помощью этого (id> 10,001 и id <20 000). Пожалуйста, предложите это работать в таком масштабе. –