dataframe - Spark 数据集过滤器元素
问题描述
我有 2 个 spark 数据集: courseDS 和 latestLessonDS ;
这是我的火花数据集 POJO:
Lesson class:
private List<SessionFilter> info;
private lessonId;
LatestLesson class:
private String id:
SessionFilter class:
private String id;
private String sessionName;
我想获取所有课程数据,其中 info.id 在课程课程中而不是在 LatestLesson id 中。
像这样的东西:
lessonDS.filter(explode(col("info.id")).notEqual(latestLessonDS.col("value"))).show();
latestLessonDS contain:
100A
200C
300A
400A
lessonDS contain:
1,[[100A,jon],[200C,natalie]]
2,[[100A,jon]]
3,[[600A,jon],[400A,Kim]]
result:
3,[[600A,jon]
解决方案
如果您的数据集大小 latestLessonDS 足够合理,您可以收集它并进行广播,然后在 courseDS 上进行简单的过滤器转换将为您提供所需的结果。
喜欢
import scala.collection.JavaConversions._
import spark.implicits._
val bc = spark.sparkContext.broadcast(latestLessonDS.collectAsList().toSeq)
lessonDS.mapPartitions(itr => {
val cache = bc.value;
itr.filter(x => {
//check in cache
})
})
推荐阅读
- swift - Swift 4中任何类型的带有错误协议的向下转换枚举
- visual-studio - DOCKER_REGISTRY 变量未设置。默认为空字符串
- angular - Angular 2-如何将一个子组件作为另一个子组件的叠加层放置在父组件中
- publish-subscribe - 使用 grpc 和 node js 通过 HTTP 2 访问 Google Cloud Pubsub
- c++ - MacOS 上 cmake + 共享库的问题
- android - 抓取时获得空 src
- reactjs - 如何取出传递给 Hoc 函数的道具
- r - GGraph 和格式化节点
- c++ - Compiling Qt projects in Qt/MsBuild format without Qt VS Tools installed
- html - 为什么我不能用边界半径做一个圆?