2016-06-29 8 views
1

テキストファイルがあり、6単語以上の行をフィルタリングする必要があります。 私はRDDを作成します。単語を行に結合する

my_data = sc.textFile("lines.txt") 

その後、私は言葉でそれぞれの行を分割:

line_words = my_data.map(lambda x: x.split(' ')) 

とフィルタを適用し、結果をファイルに保存します。

filtered_lines = line_words.filter(lambda x: len(x) > 6) 
filtered_lines.saveAsTextFile("out") 

そして、初期ファイルから:

hello world 
its fun to have fun but you have to know how 

私が取得:

[u'its', u'fun', u'to', u'have', u'fun', u'but', u'you', u'have', u'to', u'know', u'how'] 

にはどうすればカッコなしでバックラインに単語を組み合わせて、u''のですか?

は、私はそのような何かよく知っている:

my_data.filter(lambda x: len(x.split(' ')) > 6).saveAsTextFile("out") 

をしかし、私は人間のために結果を読みやすくする方法を学びたいです。

答えて

1

あなたは文字列が区切り文字列に配列の要素を変換する文字列 .join(配列)機能を使用することができます。

line = [u'its', u'fun', u'to', u'have', u'fun', u'but', u'you', u'have', u'to', u'know', u'how'] 
sentence = " ".join(line) 

はあなたが何を意味するか、このですか?

+0

私の行がRDDのため、 'sentence =" ".join(line)'を使用するとTypeErrorが発生します。 – lacerated

+1

Sry私はプログラミングで新しいです。 'combined_line = filtered_lines.map(lambda x:" ".join(x))'を使用しようとしました。一緒に2つの単語を結合するここで機能を減らす必要があると思った – lacerated

1

分割を一切スキップして処理を保存できませんでしたか?フィルタの単語数(たとえば、行内のスペースの数)をカウントしているだけです。

また、同じフィルターステップでsplitと> 6フィルターを実行することもできます。あなたは個々の言葉を利用していないので、そのデータ構造を維持する必要はありません。

+0

私はそれを行うことができます。私は最後に一行の解決策を書いたのですが、私の目標は結果を組み合わせる方法を学ぶことで、後でもっと複雑な作業を使うことができます。 – lacerated

関連する問題