FLINK의 작업을 변환

org.apache.flink.api.common.functions.FilterFunction 가져 
오기 org.apache.flink.streaming.api.scala.StreamExecutionEnvironment의

개체 TransformTest {
DEF 주 (인수 : 배열 [문자열]) : 단위 = {
브로 = StreamExecutionEnvironment ENV. getExecutionEnvironment
env.setParallelism. (1) // 글로벌 병렬도를 설정. 1

오기 org.apache.flink.api.scala._
브로 streamFromFile = env.readTextFile ( "sensor1.txt")

. // 1. 기본적이고 간단한 변환 연산자 집합 연산자
브로 데이터 스트림 = streamFromFile.map (데이터 => {
브로 dataArray가 data.split =이다 ( ",")
SensorReading는 (dataArray는 (dataArray이고, .trim) (0. 1) .trim.toLong가 dataArray (2)이 .trim이다. toDouble)
}
)
관찰에 데이터를 처리한다는 FLINK // 주에만 합산 한 후 최종 결과를 볼 것이다 하나이다
dataStream.keyBy (0) .sum (2) .print ()
dataStream.keyBy ( "ID") SUM ( "온도") 인쇄 () // 두 번째 방법.
@ 예 : 출력 전류 센서 온도 플러스 최신 10 및 마지막 타임 스탬프는 타임 스탬프 데이터 플러스. 1
dataStream.keyBy (0) .reduce ((X, Y) => SensorReading (x.id, x.timestamp의 +. 1 y.temperature + 10)). 인쇄 () // X 및 Y는 현재 값과 새로운 값을 나타내는

// 2 다수의 서브 플로우 조건
// 분할 분할
브로 SplitStream = dataStream.split (sensordata => {
IF (sensorData.temperature> 30)
서열 ( " 높은 ")
다른
서열 ("저 ")
})
발 = 높은 splitStream.select ("높음 ")
발 = splitStream.select 낮은 ("저 ")
발 모든 splitStream.select = ("높음 ","저 ")
고 .print ( "고온 ")
low.print ("저온 ")
all.print ( "모든")

// 병합 : 연결 및 연합
/ *
* 1. 스트림의 두 가지 유형의 결합이 동일해야합니다 전에 조정이 다시 메뉴얼에 동일하게 후에는, 연결과 다를 수 있습니다
2. 연결이 두 스트림을 운영 *, 실행할 수있는 노동 조합의 복수
* /
발 = 고 경고. 지도 (X => (x.id, x.temperature))
발 connectedStream = warning.connect (저)
발 = connectedStream.map 메뉴얼에 (
warningData => (warningData._1, warningData._2, "경고"),
safeData = > (safeData.id, "안전")
)
coMap.print ()

발 = unionStream의 high.union (저)
unionStream.print ()

// streamFromFile.map (데이터 => {
// LEN = data.split 발 ( " ")
// LEN (0) +" "LEN +. (1)
//}).

//自定义函数类
dataStream.filter (새 MyFilter) .print ()

env.execute ( "시험 변환")
}
}

클래스 MyFilter () filterFunction의 [SensorReading {확장
대체 DEF 필터 (t : SensorReading를) 부울 = {
t.id.startsWith ( "sensor_1")
}
}

추천

출처www.cnblogs.com/wddqy/p/12172284.html