首页 > 解决方案 > 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]

标签: dataframeapache-sparkdataset

解决方案


如果您的数据集大小 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 
      })
    })

推荐阅读