2017-09-13 21 views

答えて

2

カスタムDataFlowワーカーを準備するには、setup.pyファイルに必要なパッケージをインストールするコマンドを提供する必要があります。 まず、setup.pyファイルを作成します(これは一般的なsetup.pyファイルです)。 あなたのパッケージをREQUIRED_PACKAGES変数にリストアップするか、ちょうどpip install matplotlib==2.0.2CUSTOM_COMMANDSに入れてください。

matplotlibには、システムにインストールする追加のパッケージ/ライブラリが必要なので、それらのインストールコマンドを指定してインストールする必要があります。さらに、DataFlowジョブ内でプロットをレンダリングする場合は、matplotlibバックエンドを1に設定する必要があります。ファイル出力に書き込むことができます(How can I set the 'backend' in matplotlib in Python?参照)。

import apache_beam as beam 
p = beam.Pipeline("DataFlowRunner", argv=[ 
'--setup_file', './setup.py', 
# put other parameters here 
]) 

ジェネリックsetup.pyファイル:

import sys 
import os 
import logging 
import subprocess 
import pickle 

import setuptools 
import distutils 

from setuptools.command.install import install as _install 



class install(_install): # pylint: disable=invalid-name 
    def run(self): 
     self.run_command('CustomCommands') 
     _install.run(self) 

CUSTOM_COMMANDS = [ 
    ['pip', 'install', 'matplotlib==2.0.2'], 
] 


class CustomCommands(setuptools.Command): 
    """A setuptools Command class able to run arbitrary commands.""" 

    def initialize_options(self): 
     pass 

    def finalize_options(self): 
     pass 

    def RunCustomCommand(self, command_list): 
     logging.info('Running command: %s' % command_list) 
     p = subprocess.Popen(
      command_list, 
      stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) 
     # Can use communicate(input='y\n'.encode()) if the command run requires 
     # some confirmation. 
     stdout_data, _ = p.communicate() 
     logging.info('Command output: %s' % stdout_data) 
     if p.returncode != 0: 
      raise RuntimeError(
       'Command %s failed: exit code: %s' % (command_list, p.returncode)) 

    def run(self): 
     for command in CUSTOM_COMMANDS: 
      self.RunCustomCommand(command) 


REQUIRED_PACKAGES = [ 

] 


setuptools.setup(
    name='name', 
    version='1.0.0', 
    description='DataFlow worker', 
    install_requires=REQUIRED_PACKAGES, 
    packages=setuptools.find_packages(), 
    cmdclass={ 
     'install': install, 
     'CustomCommands': CustomCommands, 
     } 
    ) 

その後、setup.pyファイルを作成した後、ちょうどApacheのビームパイプラインパラメータを指定します

関連する問題