私は、各レコードはintでRDD、持っている:私がする必要があるのは、バッチにこのRDDを分割されスパーク。バッチに分割RDD
[0,1,2,3,4,5,6,7,8]
を。私。
使用ZipWithIndex:
[[0,1,2], [3,4,5], [6,7,8]]
これは、しかし、私は数日の最後に困惑していますし、次のソリューションを除いて何かを見つけることができない、些細な音:各要素は、要素の固定サイズのリストである他のRDDを作りますRDDのレコードを列挙しますマップを()を使用して、このRDDオーバー
[0,1,2,3,4,5] -> [(0, 0),(1, 1),(2, 2),(3, 3),(4, 4),(5, 5)]
反復とINDEを計算X生成されたインデックスによって
index = int(index/batchSize)
[1,2,3,4,5,6] -> [(0, 0),(0, 1),(0, 2),(1, 3),(1, 4),(1, 5)]
そして基等が挙げられます。
[(0, [0,1,2]), (1, [3,4,5])]
これは、しかし、私はここでグループを使用したくない、私は必要なものを私に取得します。プレーン・マップ・リデュースやApache Crunchのような抽象化を使用しているときは、それは自明です。しかし、重いグループを使わずにSparkで同様の結果を出す方法はありますか?
あなたがa)は複数のフィルタを適用することができます説明。 b)カスタムパーティションを使用し、各パーティションからRDDを作成します。私はあなたが固定サイズのRDDが必要な理由を想像することはできません。 – khachik
@khachik「複数のフィルタを適用する」と「カスタムパーティショナーを実装する」を詳しく教えてください。固定サイズのRDDは必要ありません。 RDDの各レコードはレコードの配列(バッチ)にする必要があります。これは、単一のレコードではなくレコードのバッチを消費し、予測のバッチを返す数学モデルを持っているために必要です。 – Dmitry