繁体   English   中英

Spark - 在不收集数据的情况下在数据集之间进行迭代

[英]Spark - Iteration between Datasets without collecting data

在我的代码的某个时刻,我有两个不同类型的数据集。 我需要从一个数据过滤数据到另一个。 假设没有办法从这一点开始更改代码,有没有办法在不从 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));

任何建议,甚至有助于更好的设计以避免此类情况,将不胜感激。

不改变你的方法没有! 这是不可能的,因为在 map 块中,您不能直接使用驱动程序的抽象(数据集、数据帧或 Spark 上下文)。 请参阅下一个链接以获取更多信息:

Apache Spark:何时不使用 mapPartition 和 foreachPartition?

引起:java.lang.NullPointerException at org.apache.spark.sql.Dataset

一种不同的方法是识别两个数据集之间的链接字段,加入它们(根据您的示例report1Ds.join(report2Ds, report1Ds.company == report2Ds.employeer)又名report1Ds.join(report2Ds, report1Ds.company == report2Ds.employeer) ),然后根据逻辑应用过滤器你要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM