我有一个使用Apache编写的应用程序。它实现了基于信息论的特征选择方法。对于方法mRMR,我有两个DataSet<>s -一个(比如A )包含选定的特性,另一个(比如B )包含所有其他特性。当我选择一个特性时,我从B中删除该特性,并将其添加到A中。因此,我首先计算类和特性之间的互信息,然后选择具有最大互信息的特性,并将其添加到A中。然后,我有一个cross()函数来计算A、和B中所有特性之间的相互信息。通过这样做,我可以调整B中所有功能的相互信息,并为A选择新的功能。我做了很多次,直到我选择了想要的数量的功能。我使用以下命令提交该职务:
~/Programs/flink-1.4.0/bin/flink run -c org.apache.flink.feast.Main target/flink-feast-1.0.jar --method mrmr --top 5 --input ~/Datasets/00388/data_copy.txt --label 0--top 5参数用于传递我希望程序选择的功能的数量。在我的测试数据集中,我有1024个特性。
现在,当我想选择5个功能时,效果很好。当我尝试选择15个功能时,提交作业需要10分钟,当我尝试选择20个功能时,需要花费更多的时间。这种行为正常吗?如果没有,我又能做些甚麽呢?我怀疑cross()函数,它的提交需要很长时间,而不是执行。我试图增加作业和任务管理器的堆大小,但问题仍然存在。
谢谢。
发布于 2018-02-01 12:13:42
我不知道您的cross()函数是什么,但看起来在Flink运行作业之前,它使用top值向Flink运算符图添加操作符。
根据我的经验,如果提交作业需要很多时间,这是因为运算符图太复杂了,所以Flink需要更多的时间来探索所有可以应用的可定位优化
这个寄来的时间少了。
source -> map -> keyBy -> windows -> reduce -> sink而不是像下面这样的复杂工作
/->filter->flatMap-> keyBy -> windows -> reduce-\
/-->filter->flatMap-> keyBy -> windows -> reduce--\
source -> map --->filter->flatMap-> keyBy -> windows -> reduce---> join -> sink
\-->filter->flatMap-> keyBy -> windows -> reduce--/
\->filter->flatMap-> keyBy -> windows -> reduce-/https://stackoverflow.com/questions/48547000
复制相似问题