gpt4 book ai didi

java - 将类对象转换为 Java RDD

转载 作者:太空宇宙 更新时间:2023-11-04 11:52:32 25 4
gpt4 key购买 nike

我有一个 pojo-AnalyticsModel,并且有一个循环为 pojo 创建对象。每次创建对象时,我都会将其保存到名为 AnalyticsModelList 的列表中。然后退出循环后,我将列表转换为 RDD。下面是我的代码:

do {    
AnalyticsModel analyticsObj = new AnalyticsModel(time, columnName, aggrResult);
analyticsList.add(analyticsObj);
}while (cal.getTimeInMillis() <= endDate);

JavaRDD<AnalyticsModel> analyticsRdd = sc.parallelize(analyticsList);

我可以直接将对象作为 RDD,而不是添加到列表中然后将其转换为 RDD。有人可以指导我吗?我对 Spark 还很陌生。

谢谢

最佳答案

有一个办法。但是如果您有很少的 AnalyticsModel 对象,您所做的工作就很好(您不必通过以下解决方案使您的生活变得复杂)。如果您要创建大量 AnalyticsModel 对象,请考虑以下解决方案。

此类每次调用都会生成一个 AnalyticsModel 实例。

public class AnalyticsModelGenerator implements FlatMapFunction<String, AnalyticsModel> {

private final Long endDate;
private final Calendar cal;

public AnalyticsModelGenerator(Calendar cal, Long endDate) {
this.cal = cal;
this.endDate = endDate;
}
@Override
public Iterable<AnalyticsModel> call(String dummyInput) throws Exception {
return new Iterable<AnalyticsModel>() {
@Override
public Iterator<AnalyticsModel> iterator() {
return new AMIterator(cal, endDate);
}
}
}

private class AMIterator implements Iterator<AnalyticsModel> {
private final Long endDate;
private final Calendar cal;

public AMIterator(Calendar cal, Long endDate) {
this.cal = cal;
this.endDate = endDate;
}

@Override
public boolean hasNext() {
return (cal.getTimeInMillis() <= endDate);
}

@Override
public AnalyticsModel next() {
return new AnalyticsModel(time, columnName, aggrResult);
}
}
}

下面的代码创建一个 AnalyticsModel 对象的 RDD:

JavaRDD<String> initJavaRDD = jSparkContext.parallelize(new ArrayList<String>(){{add("dummyInput");}});
JavaRDD<AnalyticsModel> amJavaRDD = initJavaRDD.flatMap(new AnalyticsModelGenerator(cal, endDate));

关于java - 将类对象转换为 Java RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41668340/

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