java - 传递给我的方法的特定大小的输入数组的 StackOverflowError?
问题描述
我想根据其属性之一递归地拆分attVal
数据ds1
集(...这样的数据集:ds2
ds3
min(df2)
max(df2)
min(df3)
max(df3)
ds1
Split by min(df2) and max(df2):
min(df1)-----------------------------------------------max(df1)
min(df2)----------------max(df2)
或拆分max(df2)
:
min(df1)----------------------------------max(df1)
min(df2)------------------------------------max(df2)
拆分方式min(df2)
:
min(df1)------------------------------------max(df1)
min(df2)----------------------------------max(df2)
下一个拆分将使用上一步的拆分部分和min(df3) & min(df3)
值(等后续步骤使用ds4
...)。然后返回所有结果部分。为此,我创建了以下 Java 方法:
public static ArrayList<Dataset<Row>> mySplittingMethod(Dataset<Row> df1, ArrayList<Dataset<Row>> allSplittingDf) {
ArrayList<Dataset<Row>> partsOfSplits = null;
long df1Max = df1.select(max(df1.col("attVal"))).first().getLong(0);
long df1Min = df1.select(min(df1.col("attVal"))).first().getLong(0);
for (Dataset<Row> currentDf : allSplittingDf) {
df2 = currentDf;
long df2Max = df2.select(max(df2.col("attVal"))).first().getLong(0);
long df2Min = df2.select(min(df2.col("attVal"))).first().getLong(0);
if (df1Min < df2Min && df2Min < df1Max && df1Max < df2Max) {
Dataset<Row> firstDf = df1.where("attVal<= df2Min");
mySplittingMethod(firstDf, allSplittingDf);
Dataset<Row> secondDf = df1.where("attVal> df2Min");
mySplittingMethod(secondDf, allSplittingDf);
partsOfSplits.add(firstDf);
partsOfSplits.add(secondDf);
} else if (df1Min > df2Min && df1Min < df2Max && df2Max < df1Max) {
Dataset<Row> firstDf = df1.where("attVal<= df2Max");
mySplittingMethod(firstDf, allSplittingDf);
Dataset<Row> secondDf = df1.where("attVal> df2Max");
mySplittingMethod(secondDf, allSplittingDf);
partsOfSplits.add(firstDf);
partsOfSplits.add(secondDf);
} else if (df1Min > df2Min && df2Max < df1Max) {
Dataset<Row> firstDf = df1.where("attVal<= df2Min");
mySplittingMethod(firstDf, allSplittingDf);
Dataset<Row> secondDf = df1.where("attVal>= df2Min && attVal<= df2Max");
mySplittingMethod(secondDf, allSplittingDf);
Dataset<Row> thirdDf = df1.where("attVal> df2Max");
mySplittingMethod(thirdDf, allSplittingDf);
partsOfSplits.add(firstDf);
partsOfSplits.add(secondDf);
partsOfSplits.add(thirdDf);
} else continue;
}
return partsOfSplits;
}
我的问题是:对于较大尺寸的输入参数allSplittingDf
,StackOverFlow 错误显示,为什么?从算法上讲,我的递归调用有问题吗?
解决方案
推荐阅读
- swift - HKObjectQuery 不会停止
- ios - 不平衡在模态存在时调用警告,然后导航弹出到根完成
- r - 使用dplyr求和并除以重复总数?
- business-catalyst - Adobe Business 催化剂联系表通知电子邮件已更改
- ios - 首先滑动/向下滚动将消失视图
- android - 使用 facebook AdView 查找呈现的横幅的 WebView - 通过反射
- angular - Internet Explorer 正在删除我的 Angular 应用程序的上下文根?有什么办法可以避免?
- asp.net-core - 如何在 ASP Net Core 2.0 MVC Web 应用程序和 Azure AD 之间强制重新身份验证
- json - 无法快速获得字符串响应
- c# - 优化条件的方法?