迭代计算需要模型参数的初始值和终止标准。它的语法是imr(ds, initValue, mapFunc, [reduceFunc], [finalFunc], terminateFunc, [carryover=false])其中initValue参数是第一次迭代的初值,mapFunc参数是一个函数,接受的参数包括数据源实体,和前一次迭代中最终函数的输出。对于第一次迭代,它是用户给出的初始值。imr中的参数与mr函数类似。finalFunc函数接受两个参数,第一个参数是前一次迭代中最终函数的输出。对于第一次迭代,它是用户给出的初始值。第二个参数是调用reduce函数后的输出。terminateFunc参数用于判断迭代是否中止。它接受两个参数。第一个是前一次迭代中reduce函数的输出,第二个是当前迭代中reduce函数的输出。如果它返回true,迭代将会中止。carryover参数表示map函数调用是否生成一个传递给下一次map函数调用的对象。如果carryover为true,那么map函数有3个参数并且最后一个参数为携带的对象,同时map函数的输出结果是一个元组,最后一个元素为携带的对象。在第一次迭代中,携带的对象为NULL。
官方文档中有一个通过imr计算分布式数据的中位数的例子。本文将提供一个更加复杂的例子,即用牛顿法实现逻辑回归(Logistic Regression)的计算,展示imr在机器学习算法中的应用。