Flink 는 어떤 데이터 형식 을 지원 합 니까?
Flink 는 DataSet 이나 DataStream 에서 사용 할 수 있 는 요소 유형 을 제한 했다.이렇게 하 는 이 유 는 시스템 이 유형 을 분석 하여 효과 적 인 실행 전략 을 확정 하기 때문이다.
1.자바 Tuple 과 Scala Case 류;
2.Java POJO;
3.기본 유형;
4.공통 클래스;
5.값;
6.Hadoop Writables;
7.특수 유형
2.Flink 의 Tuple 유형
튜 플 타 입
Tuple
예flink
매우 특수 한 유형(원조 유형)은 추상 적 인 유형 으로 모두 26 개Tuple
의 하위 계승Tuple
이다. 그들 은 Tuple0
Tuple 25 까지
package org.apache.flink.api.java.tuple;
import java.io.Serializable;
import org.apache.flink.annotation.Public;
import org.apache.flink.types.NullFieldException;
@Public
public abstract class Tuple implements Serializable {
private static final long serialVersionUID = 1L;
public static final int MAX_ARITY = 25;
private static final Class<?>[] CLASSES = new Class[]{Tuple0.class, Tuple1.class, Tuple2.class, Tuple3.class, Tuple4.class, Tuple5.class, Tuple6.class, Tuple7.class, Tuple8.class, Tuple9.class, Tuple10.class, Tuple11.class, Tuple12.class, Tuple13.class, Tuple14.class, Tuple15.class, Tuple16.class, Tuple17.class, Tuple18.class, Tuple19.class, Tuple20.class, Tuple21.class, Tuple22.class, Tuple23.class, Tuple24.class, Tuple25.class};
public Tuple() {
}
public abstract <T> T getField(int var1);
public <T> T getFieldNotNull(int pos) {
T field = this.getField(pos);
if (field != null) {
return field;
} else {
throw new NullFieldException(pos);
}
}
public abstract <T> void setField(T var1, int var2);
public abstract int getArity();
public abstract <T extends Tuple> T copy();
public static Class<? extends Tuple> getTupleClass(int arity) {
if (arity >= 0 && arity <= 25) {
return CLASSES[arity];
} else {
throw new IllegalArgumentException("The tuple arity must be in [0, 25].");
}
}
public static Tuple newInstance(int arity) {
switch(arity) {
case 0:
return Tuple0.INSTANCE;
case 1:
return new Tuple1();
case 2:
return new Tuple2();
case 3:
return new Tuple3();
case 4:
return new Tuple4();
case 5:
return new Tuple5();
case 6:
return new Tuple6();
case 7:
return new Tuple7();
case 8:
return new Tuple8();
case 9:
return new Tuple9();
case 10:
return new Tuple10();
case 11:
return new Tuple11();
case 12:
return new Tuple12();
case 13:
return new Tuple13();
case 14:
return new Tuple14();
case 15:
return new Tuple15();
case 16:
return new Tuple16();
case 17:
return new Tuple17();
case 18:
return new Tuple18();
case 19:
return new Tuple19();
case 20:
return new Tuple20();
case 21:
return new Tuple21();
case 22:
return new Tuple22();
case 23:
return new Tuple23();
case 24:
return new Tuple24();
case 25:
return new Tuple25();
default:
throw new IllegalArgumentException("The tuple arity must be in [0, 25].");
}
}
}
원본 보기Tuple0
Tuple 25 까지플 랭크 를 보면 0-25 필드 의 템 플 릿 류 를 만들어 주 셨 어 요.
ackage org.apache.flink.api.java.tuple;
import java.io.ObjectStreamException;
import org.apache.flink.annotation.Public;
@Public
public class Tuple0 extends Tuple {
private static final long serialVersionUID = 1L;
public static final Tuple0 INSTANCE = new Tuple0();
public Tuple0() {
}
public int getArity() {
return 0;
}
public <T> T getField(int pos) {
throw new IndexOutOfBoundsException(String.valueOf(pos));
}
public <T> void setField(T value, int pos) {
throw new IndexOutOfBoundsException(String.valueOf(pos));
}
public Tuple0 copy() {
return new Tuple0();
}
public String toString() {
return "()";
}
public boolean equals(Object o) {
return this == o || o instanceof Tuple0;
}
public int hashCode() {
return 0;
}
private Object readResolve() throws ObjectStreamException {
return INSTANCE;
}
}
3.Tuple 의 사용방식 1:원본 그룹 초기 화
정적 방법 new Instance 를 사용 하여 원 그룹 구 조 를 지정 할 수 있 습 니 다.
ex:1 개의 원 조 는 하나의 공간 만 있 고 실제 사용 하 는 Tuple 1 필드 는 f0 만 있 습 니 다.
ex:12 개의 원 조 는 두 개의 공간 만 있 고 실제 사용 하 는 Tuple 2 필드 는 f0,f1 밖 에 없다.
지정 Tuple 모듈 공간 크기(필드 개수 로 이해 가능)
Tuple tuple = Tuple.newInstance(1);
방식 1:구조 원 그룹 Tuple.newInstance(xx)를 사용 하여 원 그룹 공간 크기 를 지정 하면 액세스 가 가능 하지만 색인 위 치 를 잘못 저장 하 는 경우 가 있 습 니 다.실수 로 색인 크로스 오 버 를 만 들 수 있 고 사용 이 불편 할 수 있 습 니 다.Tuplex.of(데이터)방법 으로 Tuple 원 그룹 을 구성 합 니 다.
Tuple3<String, String, String> tuple3 = Tuple3.of("test0", "test1", "test2");
System.out.println(tuple3.f0); // test0
System.out.println(tuple3.f1); // test1
System.out.println(tuple3.f2); // test2
4.Flink 의 POJO 유형자바 와 스칼라 의 클래스 는 다음 조건 을 만족 시 킬 때 Flink 에 의 해 특수 한 POJO 데이터 형식 으로 처 리 됩 니 다.
1.공공 류 입 니 다.
2.무 참 구 조 는 공공 이다.
3.모든 속성 은 얻 을 수 있 습 니 다(공공 으로 성명 하거나 get,set 방법 을 제공 합 니 다).
4.필드 의 형식 은 Flink 가 지원 해 야 합 니 다.Flink 는 Avro 로 임의의 대상 을 정렬 합 니 다.
플 링크 는 POJO 유형의 구 조 를 분석 해 POJO 필드 를 알 게 된다.POJO 타 입 은 일반 타 입 보다 좋 습 니 다.또한 플 링크 의 POJO 방문 은 일반 유형 보다 효율 적 이 었 다.
public class WordWithCount {
public String word;
public int count;
public WordWithCount() {}
public WordWithCount(String word, int count) { this.word = word; this.count = count; }
}
DataStream<WordWithCount> wordCounts = env.fromElements(
new WordWithCount("hello", 1),
new WordWithCount("world", 2));
wordCounts.keyBy("word");
5.Flink 의 기본 유형Flink 는 Integer,String,Double 등 자바 와 스칼라 의 모든 기본 데이터 형식 을 지원 합 니 다.
6.Flink 의 일반적인 유형
Flink 는 대부분의 자바,스칼라 류(API 와 사용자 정의)를 지원 합 니 다.정렬 할 수 없 는 필드 를 포함 하 는 클래스 는 제한 을 추가 한 후에 도 지원 할 수 있 습 니 다.자바 빈 규범 에 따 른 클래스 는 일반적으로 사용 할 수 있 습 니 다.
POJO 로 볼 수 없 는 모든 플 링크 는 일반 클래스 로 처 리 됩 니 다.이 데이터 형식 들 은 블랙박스 로 간주 되 며,그 내용 은 보이 지 않 는 다.유 니 버 설 클래스 는 Kryo 를 사용 하여 서열/반 서열 화 를 진행 합 니 다.
7.Flink 의 값 유형 Values
org.apache.flinktypes.Value 인 터 페 이 스 를 실현 하 는 read 와 write 방법 을 통 해 사용자 정의 코드 를 제공 하여 직렬 화/반 직렬 화 를 진행 합 니 다.일반적인 직렬 화 프레임 워 크 를 사용 하 는 것 이 아 닙 니 다.
Flink 가 미리 정의 한 값 유형 은 네 이 티 브 데이터 형식 과 일일이 대응 합 니 다(예 를 들 어 ByteValue,Short Value,IntValue,LongValue,FloatValue,DoubleValue,StringValue,CharValue,BooleanValue).이러한 값 유형 은 네 이 티 브 데이터 형식의 가 변 변형 체 로 서 그들의 값 은 바 꿀 수 있 고 프로그램 이 대상 을 다시 사용 하여 GC 의 압력 을 완화 할 수 있 도록 합 니 다.
8.Flink 의 Hadoop Writable 클래스
org.apache.hadop.Writable 인터페이스의 유형 을 실현 합 니 다.이 유형의 직렬 화 논 리 는 write()와 readFields()방법 에서 이 루어 집 니 다.
9.Flink 의 특수 유형
Flink 의 특별한 유형 은 다음 과 같은 두 가지 가 있 습 니 다.
1.Scala 의 Either,Option,Try.
2.자바 에이 피 는 나 름 대로 의 에 이 더 실현 이 있다.
자바 Api 는 스칼라 와 유사 하 다
Either
.이것 은 두 가지 가능 한 유형의 값,Left 또는 Right 를 나타 낸다.Either
오류 처리 나 두 가지 서로 다른 유형의 기록 을 출력 해 야 하 는 연산 자 에 유용 하 다.유형 지우 기와 유형 추리
자바 컴 파 일 러 는 컴 파 일 러 를 한 후에 많은 일반적인 유형의 정 보 를 버린다.이것 은 자바 에서 형식 지우 기 라 고 합 니 다.이것 은 실행 할 때 대상 의 인 스 턴 스 가 일반적인 유형 을 알 지 못 한 다 는 것 을 의미한다.
예 를 들 어 JVM 에서 DataStream
List<String> l1 = new ArrayList<String>();
List<Integer> l2 = new ArrayList<Integer>();
System.out.println(l1.getClass() == l2.getClass());
범 형:비교적 정확 한 표현 은 바로 매개 변수 화 유형 을 위 한 것 이거 나 유형 을 매개 변수 로 한 가지 유형 이나 방법 에 전달 할 수 있다 는 것 이다.Flink 의 자바 API 는 버 려 진 형식 정 보 를 재 구축 하고 데이터 세트 와 작업 에 명확 하 게 저장 하려 고 합 니 다.DataStream.getType()방법 을 통 해 형식 을 가 져 올 수 있 습 니 다.이 방법 은 TypeInformation 의 인 스 턴 스 를 되 돌려 줍 니 다.이 인 스 턴 스 는 Flink 내부 에서 형식 을 표시 하 는 방식 입 니 다.이 플 링크 는 어떤 데이터 형식 을 지원 합 니까?이 글 은 여기까지 소개 되 었 습 니 다.더 많은 Flink 와 관련 된 데이터 형식 내용 은 저희 의 이전 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 도 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Flink On YARN 고가용 클러스터 모드 구축(flink-1.10.0-bin-scala_2.11.tgz)다운로드 주소:https://flink.apache.org/downloads.html 다운로드한 설치 패키지를 서버에 업로드하고 지정한 디렉터리에 압축을 풀십시오. 명령은 다음과 같습니다. 파일 끝에 다음과 같은 내...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.