入力があります。これは、単一のプリミティブ、またはプリミティブのリストまたはタプルである可能性があります。
次のように、リストにまとめたいと思います。
def flatten(values):
return list(values)
通常の場合はフラットになります(tastringではない)
しかし、values = '1234'の場合、['1'、 '2'、 '3'、 '4']を取得しますが、['1234']が必要です。
そして、values = 1の場合、TypeErrorが発生します。'int'オブジェクトは反復可能ではありませんが、[1]が必要です。
これを行うためのエレガントな方法はありますか?最後に本当にやりたいのは'\t'.join(flatten(values))
編集:これをもっとよく説明させてください...
ダンボを使用して、Hadoopバイナリシーケンスファイルをフラットタブで区切られたテキストファイルに変換したいと思います。出力フォーマットオプションを使用して、-outputformat text
Dumboは、HadoopストリーミングのPythonラッパーです。要するに、私はマッパー関数を書く必要があります:
def mapper(key、values)#いくつかのことを行うyield k、v
ここで、kはキーの最初の部分からの文字列であり、valueは、キーの残りの部分と値を文字列として含むタブ区切りの文字列です。
例えば:
input: (123, [1,2,3])
output: ('123', '1\t2\t\t3')
またはより複雑:
input: ([123, 'abc'], [1,2,3])
output: ('123', 'abc\t1\t2\t\t3')
入力キーまたは値は、プリミティブまたはプリミティブのリスト/タプルにすることができます。何でも処理でき、値のリストを返すことができる「フラット化」関数が必要です。
out値については、次のようにしますv ='\ t'.join(list(str(s)for s in flatten(seq)))