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