在Apache Beam中使用for循环进行步进是否可以

问题描述

我有几个功能(或转换):func1,func2,func3,...

和包含函数的字典

gameID

我正在考虑的是传递一个参数FUNCS = { '1': func1,'2': func2,... } ,该参数接受一个整数字符串,并使用funcs遍历for,并执行函数

例如:

说我通过funcs,然后函数执行如下:

funcs="1321"

并且函数按顺序执行:func1,func3,func2,func1。

与:相比有什么区别

with beam.Pipeline as p:
    lines = (
        p
        | "read file" >> beam.io.ReadFromText('gs://some/inputData.txt')
    )
    for f in funcs: # 1321
        lines = lines | FUNCS[f](#some other params)

我认为这是可能的;但这是一个好主意吗?平行光束会不会有不利之处?

真正的问题是:

首先建立管道,然后执行吗?

上面的with ... lines = ... lines = lines | func1 | func3 | func2 | func1 循环和硬编码步骤会以相同的流水线结尾吗? for循环对效率和最终结果有什么影响?

我正在使用Google Dataflow btw的flex模板。

解决方法

这是一个聪明的问题。

简单的答案是:,首先构建管道,然后执行。

仅在退出static QString toString(HRESULT hr) { _com_error err{hr}; const TCHAR* lastError = err.ErrorMessage(); return QStringLiteral("Error 0x%1: %2").arg((quint32)hr,8,16,QLatin1Char('0')) .arg(lastError); } static QString getLastErrorMsg() { QString s = toString(HRESULT_FROM_WIN32(GetLastError())); return s; } int main(int argc,char* argv[]) { QCoreApplication a(argc,argv); QString m_src = QString("C:/Users/CybeX/Documents/BLMS/Repo/BLMS-Work-Dev/Meeting 2 - Requirements Document Discussion & Dev/2020-05-19 11.22.30 Someone Person's Zoom Meeting 98661954658/zoom_0.mp4"); QString m_dst = QString("C:/Users/CybeX/Documents/BLMS/Repo/BLMS-Work-Dev/Meeting 2 - Requirements Document Discussion & Dev/2020-05-19 11.22.30 Someone Person's Zoom Meeting 98661954658/zoom_0.mp42"); auto rc = CopyFileExW(m_src.toStdWString().c_str(),m_dst.toStdWString().c_str(),NULL,0); if (rc == 0) { QString s = getLastErrorMsg(); // copy failed qDebug() << "Failed"; } else { qDebug() << "Copied"; // Always gets hit } // copy success return a.exec(); } 块之后才执行管道。

您的with循环完全没问题。