2017-06-05 14 views
0

私はapache sparkで練習していましたが、いくつかの計算を試みました。しかし、私は私の望む結果を達成することができましたが、私はそれが働く前に2つの異なる方法を試しなければなりませんでした。RDD計算データセットをフィルタリングする

私はRDDを作成した既存のデータセットを持っています。

:私は、私は、既存のデータセットからRDDを作成したので、@で始まる単語をフィルタリングし、取得したい

を「RT @NigeriaNewsdesk Chibok女子生徒は@todayngを経由して5人のボコ・ハラムの指揮官のために交換されました」。私はまた、第二の試みで、それFirst Result を添付します。この

[u'R', u'T', u' ', u'@', u'N', u'i', u'g', u'e', u'r', u'i', u'a', u'N', u'e', u'w', u's', u'd', u'e', u's', u'k', u':', u' ', u'C', u'h', u'i', u'b', u'o', u'k', u' ', u's', u'c', u'h', u'o', u'o', u'l', u'g', u'i', u'r', u'l', u's', u' ', u'w', u'e', u'r', u'e', u' ', u's', u'w', u'a', u'p', u'p', u'e', u'd', u' ', u'f' 

のようなものを持って

usernameFile = sc.parallelize(tweets) 
username = usernameFile.flatMap(lambda line: line.split()).filter(lambda x: x.startswith('@')).collect() 
print(username) 

、私は、二回目は絶対にうまく働いたこの

tweets = tweets.split(" ") 
usernameFile = sc.parallelize(tweets) 
username = usernameFile.flatMap(lambda line: line.split()).filter(lambda x: x.startswith('@')).collect() 
print(username) 
print("username done") 

のような何かをしましたしかし、なぜ私はデータセットを並列化する前に分割しなければならなかったのですか?

これを最初にやっていなくても同じことを達成できますか?

tweets = tweets.split(" ") 

ありがとうございます。

答えて

1

ただ、このように直接マップ:

import re 

tweets = sc.parallelize([ 
    "RT @foo abc @bar" 
]) 

tweets.flatMap(lambda s: re.findall("@\w+", s)) 

それはそれよりも簡単で取得していません:)

関連する問題