gpt4 book ai didi

java - Spark - 数据集之间的迭代而不收集数据

转载 作者:可可西里 更新时间:2023-11-01 15:20:15 24 4
gpt4 key购买 nike

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

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

最佳答案

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

Apache Spark : When not to use mapPartition and foreachPartition?

Caused by: java.lang.NullPointerException at org.apache.spark.sql.Dataset

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

关于java - Spark - 数据集之间的迭代而不收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54923488/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com