2016-09-01 16 views
0

私は、別のデータセットのデータの範囲に基づいてデータセットの特定の値をフィルタリングする関数を適用しようとしています。私はいくつかgroupBysを行い、参加するので、私は、関数に渡しているパラメータのフォーマットは2回の反復可能オブジェクトを持っており、以下のようになってきました:pysparkの反復可能なRDDでフィルタを使用できません

g1 = g0.map(lambda x: timefilter(x[0])) 

xは、[0] <pyspark.resultiterable.ResultIterable object at 0x23b6610>, <pyspark.resultiterable.ResultIterable object at 0x23b6310>)

です関数timefilterを入力すると、x [0]の値に基づいてx [1]の値をフィルタリングできるようにする必要があります。私は(私はちょうどここtwoListを示しているが、twoListtwoRDDの両方で)以下しようとすると、しかし:AttributeError: 'ResultIterable' object has no attribute 'filter' 、その後、後のエラーの束:

def timefilter(RDDList): 
    oneList = list(RDDList[0]) 
    twoList = list(RDDList[1]) 
    twoRDD = RDDList[1] 
    test = twoList.filter(lambda x: x[4]=='helloworld') 
    return test 

それは私に、次のエラーが発生します。

私はiterablesの任意の形式でフィルタを使用することはできないようですが、私は非常に単純なものを見逃しているように感じる。関数に欠けている変換がありますか?

+0

明らかに 'RDDList'はRDDのリストではありません。だから、あなたがしていることをすることはできません。 – fl00r

+0

@ fl00r Iterable RDDを関数のリストに変換します。何が起きているのかをデバッグしているうちに、私は「return oneList」を返して、g1で収集を実行すると、リストが表示され、部品が正常に動作するように見えます。私はなぜリスト(RDD)をリストとして扱うことができないのかわかりません。 – psak

+0

pythonに 'list.filter()'が存在しないためです。リストの理解度を試すことができます。例えば、 'x> = 0の場合はx in first in x> – ShuaiYuan

答えて

0

反復可能なRDDでのフィルタリングは不可能であることがわかりましたので、私はちょうどpythonの組み込みフィルタ関数を使用しました。次の行に沿って何か:filter(lambda x: x[1] in oneList, twoList)

関連する問題