Передайте необязательное свойство из основного рабочего процесса oozie в subworkflow

Не то, чтобы мой ответ мог быть или не быть более «эффективным», но когда я прочитал ваш код, вы подсчитали, сколько цифр в вашем номере, чтобы вы могли определить, насколько велики сделать ваш массив, а затем вы рассчитали, как верните свой массив в отсортированное целое число.

Мне кажется, что вы захотите написать свой собственный код, который выполнил сортировку без использования встроенных функций, что и делает мой образец. Кроме того, я добавил возможность сортировки в порядке возрастания или убывания, что также легко добавить в ваш код.

UPDATED

Оригинальный алгоритм отсортировал цифры, теперь это сортирует цифры так, чтобы конечный результат был самым большим или наименьшим в зависимости от второго переданного параметра. Однако при работе с отрицательным числом второй параметр рассматривается как противоположный.

using System;

public class Program
{
    public static void Main()
    {
        int number1 = 2927466;
        int number2 = 12492771;
        int number3 = -39284925;

        Console.WriteLine(OrderDigits(number1, false));
        Console.WriteLine(OrderDigits(number2, true));
        Console.WriteLine(OrderDigits(number3, false));
    }

    private static int OrderDigits(int number, bool asc)
    {   
        // Extract each digit into an array
        int[] digits = new int[(int)Math.Floor(Math.Log10(Math.Abs(number)) + 1)];
        for (int i = 0; i < digits.Length; i++)
        {
            digits[i] = number % 10;
            number /= 10;
        }

        // Order the digits
        for (int i = 0; i < digits.Length; i++)
        {
            for (int j = i + 1; j < digits.Length; j++)
            {               
                if ((!asc && digits[j] > digits[i]) ||
                    (asc && digits[j] < digits[i]))
                {
                    int temp = digits[i];
                    digits[i] = digits[j];
                    digits[j] = temp;
                }
            }
        }

        // Turn the array of digits back into an integer
        int result = 0;     
        for (int i = digits.Length - 1; i >= 0; i--)
        {
            result += digits[i] * (int)Math.Pow(10, digits.Length - 1 - i);
        }

        return result;
    }
}

Результаты:

9766422
11224779
-22345899

См. рабочий пример здесь ... https://dotnetfiddle.net/RWA4XV

0
задан Vijay 13 July 2018 в 20:24
поделиться

1 ответ

<workflow-app name='hello-wf' xmlns="uri:oozie:workflow:0.4">
    <parameters>
        <property>
            <name>inputDir</name>
        </property>
        <property>
            <name>outputDir</name>
            <value>out-dir</value>
        </property>
    </parameters>
    ...
    <action name='firstjob'>
        <map-reduce>
            <job-tracker>${jobTracker}</job-tracker>
            <name-node>${nameNode}</name-node>
            <configuration>
                <property>
                    <name>mapred.mapper.class</name>
                    <value>com.foo.FirstMapper</value>
                </property>
                <property>
                    <name>mapred.reducer.class</name>
                    <value>com.foo.FirstReducer</value>
                </property>
                <property>
                    <name>mapred.input.dir</name>
                    <value>${inputDir}</value>
                </property>
                <property>
                    <name>mapred.output.dir</name>
                    <value>${outputDir}</value>
                </property>
            </configuration>
        </map-reduce>
        <ok to='secondjob'/>
        <error to='killcleanup'/>
    </action>
    ...
</workflow-app>

В приведенном выше примере, если inputDir не указан, Oozie выведет сообщение об ошибке вместо отправки задания. If = outputDir = не указан, Oozie будет использовать значение по умолчанию, out-dir.

Взято из https://oozie.apache.org/docs/3.3.1/WorkflowFunctionalSpec.html # a4.1_Workflow_Job_Properties_or_Parameters

1
ответ дан Philipp M 17 August 2018 в 12:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: