2016-09-18 7 views
0

入力テキストファイルをキー/値RDDに変換しようとしていますが、以下のコードは機能しません(テキストファイルはタブで区切られたファイルです)。 ScalaとSparkので、私は本当にあなたの助けに感謝します。sparkでスカラーを使用してデータを変換する

import org.apache.spark.{SparkConf, SparkContext} 
import scala.io.Source 

object shortTwitter { 

    def main(args: Array[String]): Unit = { 
    for (line <- Source.fromFile(args(1).txt).getLines()) { 
     val newLine = line.map(line => 
     val p = line.split("\t") 
     (p(0).toString, p(1).toInt) 
    ) 
} 

    val sparkConf = new SparkConf().setAppName("ShortTwitterAnalysis").setMaster("local[2]") 
    val sc = new SparkContext(sparkConf) 
    val text = sc.textFile(args(0)) 
    val counts = text.flatMap(line => line.split("\t")) 
    } 
} 
+0

"以下のコードは機能しません" - どのようにそうですか?失敗は何ですか? –

答えて

1

私は、あなたがたRDDはタイプRDD[(String, Int)]を持つようにしたいと仮定しています -

  • をあなたはmap(単一の新しいレコードに、各レコードを変換する)とないflatMap(これを使用する必要がありますあなたはタプル
splitの結果をマップする必要があり
  • 複数レコードに各レコードを変換します

    全体で:コメントで明確化あたり

    val counts = text 
        .map(line => line.split("\t")) 
        .map(arr => (arr(0), arr(1).toInt)) 
    

    EDIT:あなたも(ファイルを順次読み込み)非スパーク部分を固定に興味があるなら、あなたがのために、理解に多少の誤差があります構文は、ここに全体があります:

    def main(args: Array[String]): Unit = { 
        // read the file without Spark (not necessary when using Spark): 
        val countsWithoutSpark: Iterator[(String, Int)] = for { 
        line <- Source.fromFile(args(1)).getLines() 
        } yield { 
        val p = line.split("\t") 
        (p(0), p(1).toInt) 
        } 
    
        // equivalent code using Spark: 
        val sparkConf = new SparkConf().setAppName("ShortTwitterAnalysis").setMaster("local[2]") 
        val sc = new SparkContext(sparkConf) 
        val counts: RDD[(String, Int)] = sc.textFile(args(0)) 
        .map(line => line.split("\t")) 
        .map(arr => (arr(0), arr(1).toInt)) 
    } 
    
  • +0

    それ以外に、エラーは '単純な式の不正な開始、val p = line.split( "\ t")'と表示されます。このエラーのため、私はコードを一切実行できません – tobby

    +1

    ああ、コードはあなたがスパークを使って何をしようとしているのかを明確にするためのものだと思っていました。スパークを使って同じことをやっています...とにかく - 更新された答えを見てください。 –

    +0

    ありがとうございました! 2番目の部分は何か他のことをするコードでした。混乱のおかげで申し訳ありません..そしてもう1つ質問! 「印刷」を使用して火花のないコードの結果を確認するにはどうすればよいですか? – tobby

    関連する問題