私は、別のデータセットのデータの範囲に基づいてデータセットの特定の値をフィルタリングする関数を適用しようとしています。私はいくつか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を示しているが、twoList
とtwoRDD
の両方で)以下しようとすると、しかし: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の任意の形式でフィルタを使用することはできないようですが、私は非常に単純なものを見逃しているように感じる。関数に欠けている変換がありますか?
明らかに 'RDDList'はRDDのリストではありません。だから、あなたがしていることをすることはできません。 – fl00r
@ fl00r Iterable RDDを関数のリストに変換します。何が起きているのかをデバッグしているうちに、私は「return oneList」を返して、g1で収集を実行すると、リストが表示され、部品が正常に動作するように見えます。私はなぜリスト(RDD)をリストとして扱うことができないのかわかりません。 – psak
pythonに 'list.filter()'が存在しないためです。リストの理解度を試すことができます。例えば、 'x> = 0の場合はx in first in x> – ShuaiYuan