2016-07-20 9 views
0

は今、私は非効率的なアプローチを持っている:SparkのIDのリストからIDを含むすべてのデータを検索するにはどうすればよいですか?

ids = [...] 
matched = [] 
    for id in ids: 
     d = data.where(data.id == id) 
     d = d.take(1) 
     matched.append(d[0][3]) 

私はより速く、これを行うことができますどのように思ったんだけど? データには4列が含まれ、4番目の列にはidsが含まれます。

-update-

おそらくこれは?

これは、上記のアプローチでは40分ではなく5分を要する。

+0

idsは行のリストですか?なぜRDDやデータフレームではないのですか? – David

+0

私は信じているデータフレームですが、Sparkを使い始めたので確信しています。よりよいアプローチは何と思いますか? – blpasd

答えて

1

最初の例では、ドライバーノードのすべてのデータを収集し、pythonで処理しています。このアプローチが分散されていないため、Sparkを使用する利点はありません。

第2のアプローチでは、spark SQLを使用して配布されます。以下のようにRDD APIを使用することもできます。 RDD APIはより柔軟ですが、通常は少し遅くなります。上記のように、Dataframe API(またはSQLのもの)を使用できる場合は、それらを使用してください。

ids = [...] 
data.rdd.filter(lambda x: x.id in ids).collect() 
+0

ありがとうございます。 4分35秒:) – blpasd

関連する問題