2016-06-01 5 views
0

私は新しいパラメータ名変更Pythonのメソッドのパラメータ名、プログラム

どのように修正することができるとの新しいメソッドを作成しない方法

の実際の署名を変更するために見ているわけではありませんメソッドのシグネチャ内のパラメータの名前?

カスタム内部フレームワーク上でSpark Streamingジョブ用の抽象クラスを作成しています。このクラスでは、パラメータ名の1つがKafkaトピックの名前と一致する必要があります。そうでない場合は、オプションのフラグとして引数が取り込まれます。ここで

は、問題のメソッドです:

def apply(self, sc, records): 

    if not self.FILTER_FIELDS: 
     raise Exception('SalesForceTransformStage requires FILTER_FIELDS:[_label_,[_values_]]') 

    return shipping_label \ 
     .filter(lambda rec: rec[self.FILTER_FIELDS[0]] in self.FILTER_FIELDS[1]) \ 
     .filter(self.filters) \ 
     .map(lambda rdd: format_record_keys_for_salesforce(rdd, 
                  self.SALESFORCE_FIELD_MAP, 
                  self.SALESFORCE_FIELD_LIMITS, 
                  self.INPUTS[self.INPUTS.keys()[0]])) \ 
     .map(self.mappers) \ 
     .map(self.OUTPUT.project_row) 

は今のところ、パラメータrecordsは、オプションフラグとして取り上げられているので、私は、スクリプトを実行すると、これが起こる:

usage: new_shipping_label_event.py [-h] [--force-rebuild] --records RECORDS 
           [--save-to SAVE_TO] 
new_shipping_label_event.py: error: argument --records is required 

をただし、引数名をshipping_label(カフカトピックの名前)に変更すると、スクリプトは正常に実行されます。パラメータの名前をプログラムで設定するにはどうすればよいですか?

+0

私はフィルタリングが読めるように9の上にまたがる必要があり、単一の「行」にならないように、あなたが前もってそれら 'lambda's(おそらくプライベートメソッド)を定義するお勧めすることができます。 –

+0

いいえ、それはなぜそれをもっと読みやすくしますか? –

+0

それは実際の関数ですか?私は実際のものがより複雑で、いくつかのフィルタリングが内部に埋め込まれていると仮定していましたが、それが全体の方法であれば、それは気にしません。 –

答えて

2

recordsにはデフォルト値が設定されているため、オプションです。

def apply(self, sc, records=None): 
+0

いいえ、スーパークラスが引数がカフカのトピック名と一致しているかどうかをチェックするので、オプションでは何も行いません。私はそれを十分に明確にしたと思った。 –

+0

クラスの実装のように、より多くのコードを置くことができます –

+0

おそらくない?ちょうどこれらは内部的にスパークストリーミングフレームワークに組み込まれています。 applyメソッドのシグネチャは '(self、sc、* kafka topic name *)'の形式でなければならないことを皆さんが知っておいてください。 –

関連する問題