[HADOOP] PIG 또는 HIVE 행의 행 번호를 추가하려면 어떻게합니까?
HADOOPPIG 또는 HIVE 행의 행 번호를 추가하려면 어떻게합니까?
Apache Pig를 사용하여 행 번호를 추가 할 때 문제가 있습니다. 문제는 내가 STR_ID 열을 가지고 있으며 STR_ID의 행 번호 인 STR_ID의 데이터에 ROW_NUM 열을 추가하려고합니다.
예를 들어, 다음은 입력입니다.
STR_ID
------------
3D64B18BC842
BAECEFA8EFB6
346B13E4E240
6D8A9D0249B4
9FD024AA52BA
출력을 어떻게 얻습니까?
STR_ID | ROW_NUM
----------------------------
3D64B18BC842 | 1
BAECEFA8EFB6 | 2
346B13E4E240 | 3
6D8A9D0249B4 | 4
9FD024AA52BA | 5
돼지 또는 하이브를 사용한 답변은 허용됩니다. 고맙습니다.
해결법
-
==============================
1.Facebook은 NumberRows를 포함하여 다수의 하이브 UDF를 게시했습니다. 귀하의 하이브 버전 (나는 0.8 믿는다)에 따라 클래스에 속성을 추가해야 할 수도 있습니다 (stateful = true).
Facebook은 NumberRows를 포함하여 다수의 하이브 UDF를 게시했습니다. 귀하의 하이브 버전 (나는 0.8 믿는다)에 따라 클래스에 속성을 추가해야 할 수도 있습니다 (stateful = true).
-
==============================
2.하이브에서 :
하이브에서 :
질문
select str_id,row_number() over() from tabledata;
산출
3D64B18BC842 1 BAECEFA8EFB6 2 346B13E4E240 3 6D8A9D0249B4 4 9FD024AA52BA 5
-
==============================
3.Pig 0.11에는이 목적으로 사용할 수있는 RANK 연산자가 도입되었습니다.
Pig 0.11에는이 목적으로 사용할 수있는 RANK 연산자가 도입되었습니다.
-
==============================
4.돼지에 대해 궁금한 사람들에게는 자신의 UDF를 작성하는 것이 가장 좋은 방법이라는 것을 알았습니다. 가방에 튜플에 행 번호를 추가하고 싶었습니다. 이 코드는 다음과 같습니다.
돼지에 대해 궁금한 사람들에게는 자신의 UDF를 작성하는 것이 가장 좋은 방법이라는 것을 알았습니다. 가방에 튜플에 행 번호를 추가하고 싶었습니다. 이 코드는 다음과 같습니다.
import java.io.IOException; import java.util.Iterator; import org.apache.pig.EvalFunc; import org.apache.pig.backend.executionengine.ExecException; import org.apache.pig.data.BagFactory; import org.apache.pig.data.DataBag; import org.apache.pig.data.Tuple; import org.apache.pig.data.TupleFactory; import org.apache.pig.impl.logicalLayer.schema.Schema; import org.apache.pig.data.DataType; public class RowCounter extends EvalFunc<DataBag> { TupleFactory mTupleFactory = TupleFactory.getInstance(); BagFactory mBagFactory = BagFactory.getInstance(); public DataBag exec(Tuple input) throws IOException { try { DataBag output = mBagFactory.newDefaultBag(); DataBag bg = (DataBag)input.get(0); Iterator it = bg.iterator(); Integer count = new Integer(1); while(it.hasNext()) { Tuple t = (Tuple)it.next(); t.append(count); output.add(t); count = count + 1; } return output; } catch (ExecException ee) { // error handling goes here throw ee; } } public Schema outputSchema(Schema input) { try{ Schema bagSchema = new Schema(); bagSchema.add(new Schema.FieldSchema(null, DataType.BAG)); return new Schema(new Schema.FieldSchema(getSchemaName(this.getClass().getName().toLowerCase(), input), bagSchema, DataType.BAG)); }catch (Exception e){ return null; } } }
이 코드는 단지 참고 용입니다. 실수가 될 수 없습니다.
-
==============================
5.이 예제에 대한 좋은 대답입니다.
이 예제에 대한 좋은 대답입니다.
1 단계. 자동 증가 ID 처리를위한 row_sequence () 함수 정의
add jar /Users/trongtran/research/hadoop/dev/hive-0.9.0-bin/lib/hive-contrib-0.9.0.jar; drop temporary function row_sequence; create temporary function row_sequence as 'org.apache.hadoop.hive.contrib.udf.UDFRowSequence';
2 단계 : 고유 ID 및 STR 삽입
INSERT OVERWRITE TABLE new_table SELECT row_sequence(), STR_ID FROM old_table;
-
==============================
6.버전 0.11에서 하이브는 납, 지연 및 행 번호와 같은 분석 기능을 지원합니다.
버전 0.11에서 하이브는 납, 지연 및 행 번호와 같은 분석 기능을 지원합니다.
https://issues.apache.org/jira/browse/HIVE-896
-
==============================
7.하이브 솔루션 -
하이브 솔루션 -
select * ,rank() over (rand()) as row_num from table
또는 STR_ID에 의해 행이 오름차순으로 표시되도록하려는 경우 -
select * ,rank() over (STR_ID,rank()) as row_num from table
-
==============================
8.하이브에서 :
하이브에서 :
select str_id, ROW_NUMBER() OVER() as row_num from myTable;
from https://stackoverflow.com/questions/9288578/how-can-i-add-row-numbers-for-rows-in-pig-or-hive by cc-by-sa and MIT license
'HADOOP' 카테고리의 다른 글
[HADOOP] Hadoop Map / Reduce에서 여러 맵퍼에 대해 맵 사이드 조인 구성 (0) | 2019.06.09 |
---|---|
[HADOOP] Oozie + Sqoop : JDBC 드라이버 Jar 위치 (0) | 2019.06.09 |
[HADOOP] YARN의 Spark 응용 프로그램을위한 실제 메모리 증가 (0) | 2019.06.09 |
[HADOOP] "hadoop namenode -format"은 java.net.UnknownHostException를 반환합니다. (0) | 2019.06.08 |
[HADOOP] RHadoop 패키지 (Rmr, Rhdfs, Rhbase)를 설치하는 방법은 무엇입니까? (0) | 2019.06.08 |