If the temporaryPath of Flink's ALS implementation is set, then the ALS job is executed one part after the other. This also includes the routing information calculation for the user and item blocks. If the input DataSet is calculated non-deterministically, e.g. if it's the result of a first operation, then the resulting routing information won't be consistent and ALS fails.
A solution would be to pin the input DataSet so that it will only be executed once. Until we have this functionality, I propose to simply execute the user and item routing information at the same time.