zoukankan      html  css  js  c++  java
  • luigi学习6--parameters详解

    parameter就好比是一个task的构造方法。luigi要求你在类的scope上定义parameter。

    如下面就是一个定义parameter的例子:

    class DailyReport(luigi.contrib.hadoop.JobTask):
        date = luigi.DateParameter(default=datetime.date.today())
        # ...

    对于上述的parameter你可以使用这样的方式来初始化:

    DailyReport(datetime.date(2012,5,10))或者仅仅使用DailyReport(),如果不提供参数,那么parameter的值就是默认值。

    luigi也提供了一个命令行转换器,你调用这个job的时候,可以通过--date 2012-15-10的方式来初始化parameter

    一、Instance caching

    task被他们的class和参数的值所区分。实际上,在一个worker中,两个task如果class相同,并且parameter的值也相同,那么这两个task不但equal,并且就是same instance:

    >>> import luigi
    >>> import datetime
    >>> class DateTask(luigi.Task):
    ...   date = luigi.DateParameter()
    ...
    >>> a = datetime.date(2014, 1, 21)
    >>> b = datetime.date(2014, 1, 21)
    >>> a is b
    False
    >>> c = DateTask(date=a)
    >>> d = DateTask(date=b)
    >>> c
    DateTask(date=2014-01-21)
    >>> d
    DateTask(date=2014-01-21)
    >>> c is d
    True

    二、无关要紧的参数

    不明白这种参数用在什么地方,这是官网的叙述:

    If a parameter is created with significant=False, it is ignored as far as the Task signature is concerned. Tasks created with only insignificant parameters differing have the same signature but are not the same instance:

    >>> class DateTask2(DateTask):
    ...   other = luigi.Parameter(significant=False)
    ...
    >>> c = DateTask2(date=a, other="foo")
    >>> d = DateTask2(date=b, other="bar")
    >>> c
    DateTask2(date=2014-01-21)
    >>> d
    DateTask2(date=2014-01-21)
    >>> c.other
    'foo'
    >>> d.other
    'bar'
    >>> c is d
    False
    >>> hash(c) == hash(d)
    True

    三、parameter的类型

    在上面的例子中,用的都是Parameter的子类,这些子类包括DateParameter,DateIntervalParameter,IntParameter,FloatParameter等等。

    python不是一个静态类型的语言,你不需要指定参数的类型,你可以直接使用基类Parameter

    你使用DateParameter的原因只是因为luigi需要把命令行转化Wie正确的类型而已。

    四、为其他的classes设置parameter的值

    所有的parameter都被暴漏在类级别上了,你可以通过命令行来赋值,假如你有class TaskA和TaskB:

    class TaskA(luigi.Task):
        x = luigi.Parameter()
    
    class TaskB(luigi.Task):
        y = luigi.Parameter()

    你可以运行taskB在命令行上通过:luigi TaskB --y 42

    但是你也可以同时设置TaskA的参数:luigi TaskB --y 42 --TaskA-x 43

    当然还有一种方式是写在配置文件中,你可以这么写:

    [TaskA]
    x: 45

    五、parameter的设置优先级

    从上往下优先级降低,高优先级的可以覆盖低优先级的值:

    1.通过构造方法设置值的,或者是在命令行上设置值的(task级别的)。

    2.命令行设置值(类级别)

    3.配置文件中设置值

    4.默认值

  • 相关阅读:
    在仅有的一次生命里活出自己最大的可能
    每个人都渴望赞美
    历练领导力的八字要诀
    爱情语录
    Ps
    别跟我要钱,我是教授
    改变人生的五个问题
    纪晓岚妙用口才
    智慧和智商
    经典
  • 原文地址:https://www.cnblogs.com/dongdone/p/5714207.html
Copyright © 2011-2022 走看看