私はsparkでファイルを処理しようとしていますが、入力ファイルに3行以上の情報の単一の "レコード"があります。spark slidingRDDで複数行レコードを読み取る
Rec1 Line1
Rec1 Line2
Rec1 Line3
Rec2 Line1
Rec2 Line2
Rec2 Line3
レコードの行をリンクするキーはありません。唯一の接続は、互いに隣り合う3行です。 4行目が新しいレコードの開始点であることを知らないレコードセパレータはありません。他のすべての質問は、私は何も明らかに記録区切りを持っているように見えますが、私は行数に頼らざるを得ません。
私が最初に考えたが、これは私にRDD [文字列]とRDDの各要素は、ファイルから3行であるRDD [配列[文字列]をオンorg.apache.spark.mllib.rdd.RDDFunctions
sc.textFile("myFile.txt").sliding(3,3)
からsliding
関数を使用することです。
いくつかのテストでは、これは私が望む結果を得ることができるように見えますが、sliding
関数が実際に評価中にcollect
を引き起こすことがわかりました。これは私に心配しています、それは何を集めていますか?それはデータファイル全体か他の何かですか?私のファイルは大きすぎてドライバにすべてを集めることはできません。
sliding
は、このファイルを読む最良の方法ですか、それとももっと効率的な方法ですか?
rdd.map(_。split( ""))を使用できません。map(arr =>(arr [0]、arr [1]))groupBy(_._ 2)?つまり、スペースで行を分割し、キーのrddを作成し、キーで値とグループを作成します。 – dumitru
@dumitruファイルにgroupByのキーがありません。おそらく 'zipWithIndex'を使ってグループ化に使うキーを得ることができます。また、シャッフルが完全に発生します。 – puhlen