0

在我的数据处理场景中,我有一些具有“YY”年份格式的源数据路径:

/user/${user.name}/${YEAR}/${MONTH}/${DAY}/一些数据集名称_YY

我知道在路径中已经存在 YEAR 的情况下最后使用“YY”是一个糟糕的设计,但它是我们当前系统中的内容,我们暂时无法更改它。

<datasets>
    <dataset name="hourlyds" frequency="${ds_frequency}"
        initial-instance="${ds_initial_instance}" timezone="${ds_timezone}">

        <uri-template>${baseFsURI}/${YEAR}/${MONTH}/${DAY}/alpha_${coord:formatTime(coord:actualTime(),'yy')}</uri-template>
        OR (tried one at a time)
        <uri-template>${baseFsURI}/${YEAR}/${MONTH}/${DAY}/alpha_${coord:formatTime(coord:nominalTime(),'yy')}</uri-template>

        <done-flag>${doneFlag}</done-flag>
    </dataset>
</datasets>

2 个 EL 都没有工作。即使是一个没有任何数据名称前缀的非嵌套 EL 表达式也失败了:

<uri-template>${baseFsURI}/${YEAR}/${MONTH}/${DAY}/${coord:nominalTime()}</uri-template>

每次它抛出以下错误:

Error: E1004: Expression language evaluation error [Unable to evaluate :${baseFsURI}/${YEAR}/${MONTH}/${DAY}/${coord:nominalTime()}: ], java.lang.Exception: Unable to evaluate :${baseFsURI}/${YEAR}/${MONTH}/${DAY}/${coord:nominalTime()}:

如何在数据集中获得这种“YY”格式?除了 EL 有什么方法可以到达那里吗?

提前致谢,

拉胡尔

4

1 回答 1

0

您不能将坐标放在数据集元素中,而是它们存在于输入事件或输出事件中,以在使用模板 url 格式化 URL 时描述与当前时间戳的关系

路径/user/${user.name}/${YEAR}/${MONTH}/${DAY}/some dataset name_YY是文件还是包含文件的目录?

如果是文件本身,则修改您的数据集以删除some dataset name_YY- Hadoop 会将 ${DAY} 文件夹输入解释为目录并将其中的所有文件用作您的输入

如果它们是目录并且您一次只处理 ${DAY} 文件夹并且${DAY} 文件夹仅包含一个目录(某些数据集 YY),那么您可以在操作中使用通配符:

  <action>
    <workflow>
      <app-path>${wf_app_path}</app-path>
      <configuration>
          <property>
          <name>wfInput</name>
          <value>${coord:dataIn('input')}/*</value>
        </property>
        <property>
          <name>wfOutput</name>
          <value>${coord:dataOut('output')}</value>
        </property>
      </configuration>
    </workflow>
  </action>
于 2012-05-02T10:25:54.363 回答