spark-iteration

rxztt3cl  于 2021-05-27  发布在  Hadoop
关注(0)|答案(1)|浏览(272)

在代码的某一时刻,我有两个不同类型的数据集。我需要数据从一个过滤数据到另一个。假设没有办法从现在开始更改代码,有没有办法不从report2ds收集所有数据并在spark函数中使用它来完成我在下面的注解中描述的工作?

Dataset<Report1> report1Ds ...
Dataset<Report2> report2Ds ...

report1Ds.map((MapFunction<Report3>) report -> {

String company = report.getCompany();
// get data from report2Ds where report2.getEmployeer().equals(company);

}, kryo(Report3.class));

任何建议,甚至帮助更好的设计,以避免这样的情况,将不胜感激。

ahy6op9u

ahy6op9u1#

不改变你的方法不!这是不可能的,因为在Map块中不能直接使用驱动程序的抽象(数据集、Dataframe或spark上下文)。有关更多信息,请参阅下面的链接:
apachespark:何时不使用mappartition和foreachpartition?
原因:org.apache.spark.sql.dataset上的java.lang.nullpointerexception
另一种方法是识别两个数据集之间的链接字段,将它们连接起来(aka) report1Ds.join(report2Ds, report1Ds.company == report2Ds.employeer) 根据你的例子),然后根据你想要的逻辑应用过滤器。

相关问题