Apache Spark 学習3_1

サンプルの解説です。

// RDDの作成

val questionnairRDD = sc.textFile("/spark-sample-app/data/questionnaire.csv").map { record => val splitRecord = record.split(",")

// 年齢のレンジ取得

val ageRange = splitRecord(0).toInt / 10 * 10

// 性別を取得

val maleOrFemale = splitRecord(1)

// ポイントを取得

val point = splitRecord(2).toInt

(ageRange,maleOrFemale,point)

// キャッシュの設定

questionnairRDD.cache

// カウント取得

val numQuestionnaire = questionnairRDD.count

// ポイントの合計取得

val totalPoints = questionnairRDD.map(_._3).sum

println(s"AVG ALL: ${totalPoints/numQuestionnaire}")

// タプル作成

val (totalPoint,numQuestionnaire) = questionnairRDD.map(record => (record._3,1)).reduce{ case ((intermedPoint,intermedCount),(point,one)) => (intermedPoint + point,intermedCount + one) }

// 結果出力

println(s"AVG ALL: ${totalPoints/numQuestionnaire}")

// RDD作成

val agePointOneRDD = questionnairRDD.map(record => (record._1,(record._3,1)))

// トータル平均のRDD作成

val totalPtAndCntPerAgeRDD = agePointOneRDD.reduceByKey { case ((interedPoint,intermedCount),(point,one)) => (interedPoint + point,intermedCount + one) }

// 結果を出力

totalPtAndCntPerAgeRDD.collect.foreach { case (ageRange,(totalPoint,count)) => println(s"AVG Age Range($ageRange): ${totalPoint/count.toDouble}") }


疑問

case ((interedPoint,intermedCount),(point,one))

がなぜそうなるのかが不明だな

agePointOneRDD って record => (record._3,1)なのになぜ増える?

val agePointOneRDD = questionnairRDD.map(record => (record._1,(record._3,1)))

case ((interedPoint,intermedCount),(point,one)) => (interedPoint + point,intermedCount + one) }

引数の数が変更になっているのはなぜ?

ってどういう意味かさっぱりわからん

わかる人がいたら教えてください。

管理者オススメのアプリ

簡単に日々のスケジュールを管理できる無料のphoneアプリです。
スケジュール、シフト管理、TODO,お小遣い管理、メモなどいろいろ使用できるアプリ。
メニューの並び替えも自由!


すごい手帳を使ってみる

アクセス数: 無料カウンター




トラックバック(0)

トラックバックURL: http://smartwolf.sakura.ne.jp/Blog/mt-tb.cgi/215

コメントする

ウェブページ

Powered by Movable Type 5.2.7