14

RDDとして次のテーブルがあります。

Key Value
1    y
1    y
1    y
1    n
1    n
2    y
2    n
2    n

からすべての重複を削除したいValue

出力は次のようになります。

Key Value
1    y
1    n
2    y
2    n

pyspark で作業している間、出力は次のようなキーと値のペアのリストとして表示されます。

[(u'1',u'n'),(u'2',u'n')]

forここでループを適用する方法がわかりません。通常の Python プログラムでは、非常に簡単でした。

同じ機能があるのだろうかpyspark

4

3 に答える 3

19

私はpythonについての知識がないので、この回答で提供するすべての参照とコードはjavaに関連しています。ただし、これをPythonコードに変換するのはそれほど難しくありません。

次のWeb ページをご覧ください。Sparkでサポートされているすべての変換とアクションのリストを提供する、Sparkの公式 Web ページにリダイレクトされます。

私が間違っていなければ、(あなたの場合) 最良のアプローチはdistinct()変換を使用することです。これは、ソース データセットの個別の要素を含む新しいデータセットを返します (リンクから取得)。Java では、次のようになります。

JavaPairRDD<Integer,String> myDataSet = //already obtained somewhere else
JavaPairRDD<Integer,String> distinctSet = myDataSet.distinct();

たとえば、次のようになります。

Partition 1:

1-y | 1-y | 1-y | 2-y
2-y | 2-n | 1-n | 1-n

Partition 2:

2-g | 1-y | 2-y | 2-n
1-y | 2-n | 1-n | 1-n

次のように変換されます:

Partition 1:

1-y | 2-y
1-n | 2-n 

Partition 2:

1-y | 2-g | 2-y
1-n | 2-n |

もちろん、それぞれが個別の要素のリストを持つ複数の RDD データセットが存在することになります。

于 2014-09-18T14:10:05.133 に答える
4

特定の列または列のセットからすべての重複を削除する場合、つまり、列のdistinctセットを実行する場合、pyspark にはdropDuplicates特定の列のセットを区別する関数 があります。

別名

df.dropDuplicates(['value']).show()
于 2015-08-17T22:30:27.497 に答える