如果尚未设置 Flink 开发环境,请参阅指南。 有关练习的总体介绍,请参阅如何做练习。
"出租车车程清理"练习的任务是通过删除在纽约市以外开始或结束的车程来清理一系列的 TaxiRide
事件。
GeoUtils
实用程序类提供了一个静态方法 isInNYC(float lon, float lat)
来检查某个位置是否在纽约市区域内。
此练习基于 TaxiRide
事件流,如使用出租车数据流中所述。
练习的结果应该是一个 DataStream<TaxiRide>
,它只包含在 GeoUtils.isInNYC()
定义的纽约市地区开始和结束的出租车车程事件。
结果流应打印到标准输出。
ℹ️ 最好在 IDE 的 flink-training 项目中找到这些类,而不是使用本节中源文件的链接。 IntelliJ 和 Eclipse 都可以轻松搜索和导航到类和文件。对于 IntelliJ,请参阅搜索帮助,或者只需按 Shift 键两次,然后继续输入类似
RideCleansing
的内容,接着从弹出的选项中选择。
本练习使用以下类:
- Java:
org.apache.flink.training.exercises.ridecleansing.RideCleansingExercise
- Scala:
org.apache.flink.training.exercises.ridecleansing.scala.RideCleansingExercise
练习的测试位于:
- Java:
org.apache.flink.training.exercises.ridecleansing.RideCleansingIntegrationTest
- Java:
org.apache.flink.training.exercises.ridecleansing.RideCleansingUnitTest
- Scala:
org.apache.flink.training.exercises.ridecleansing.scala.RideCleansingIntegrationTest
- Scala:
org.apache.flink.training.exercises.ridecleansing.scala.RideCleansingUnitTest
像大多数练习一样,在某些时候,RideCleansingExercise
类会抛出异常
throw new MissingSolutionException();
一旦删除此行,测试将会失败,直到你提供有效的解决方案。你也可能想先尝试一些明显错误的代码,例如
return false;
如此验证这些错误代码确实可导致测试失败,然后可以向着正确的方向实现适当的解决方案。
过滤事件
Flink 的 DataStream API 提供了一个 DataStream.filter(FilterFunction)
转换函数来过滤数据流中的事件。
可以在 FilterFunction
中调用 GeoUtils.isInNYC()
函数来检查某个位置是否在纽约市地区。
过滤器应检查每次车程的起点和终点。
Reference solutions are available in this project:
- Java:
org.apache.flink.training.solutions.ridecleansing.RideCleansingSolution
- Scala:
org.apache.flink.training.solutions.ridecleansing.scala.RideCleansingSolution