2016-11-18 5 views
1

Spark 환경이 처음입니다. 내 프로젝트에서 Spark SQL을 사용한다. Spark SQL 임시 테이블에 자동 증가 필드를 생성하려고합니다. UDF를 만들었지 만 제대로 작동하지 않았습니다. 나는 인터넷에서 다양한 예를 시도했다.Spark SQL 임시 테이블에서 자동 증가 필드 만들기

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

답변

0

우리는 자동 증가 값을 하이브 상태 UDF을 사용할 수 있습니다 : 이것은 내 자바 POJO 클래스입니다. 코드는 이렇게 될 것입니다.

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

나는 이런 식으로 뭔가를 필요로하지만 문제는 있었다 , 그럴거야? 200 만 달러의 데이터를 제공합니다. 실제로 나는 파일이 들어있는 정확한 10K 행의 작은 파일에서 200 백만 개의 행을 포함하는 큰 파일을 나누고 싶습니다. 각 행에 대해 자동 증가 숫자를 추가하고이 (ID> 10,001 및 ID <20,000)과 같은 도움으로 일괄 적으로 읽는 것으로 생각했습니다. 이 규모에서이 작업이 가능합니까? 제안하십시오. –