簡體   English   中英

此Spark / Scala代碼的正確索引是什么?

[英]What are the proper indexes for this Spark/Scala code?

我剛剛開始使用Spark和Scala。 我是從頭開始的,下面是手工編寫的,但是與我正在使用的示例非常接近。 當我運行它時,在更改代碼時,我不斷收到看似相互沖突的錯誤。 我希望將按旅行目的分組的行駛里程加起來。 非常簡單,但是無論我也設置了什么索引字段,它似乎永遠都不快樂。 如果我將其設置為(fields(6).toString,fields(5).toFloat),則會出現超出范圍的異常。 如果我將其設置為(fields(5).toString,fields(4).toFloat),則很明顯是錯誤的索引值。 這是數據的方案:

start date: date time
end date: date time
category: string
start: string
stop: string
miles: float
purpose: string

下面是代碼:

package net.massstreet

import org.apache.spark.SparkContext._
import org.apache.spark._
import org.apache.log4j._

object InitializeSparkApp {



  /** Convert input data to (customerID, amountSpent) tuples */
  def extractCustomerPricePairs(line: String) = {
    val fields = line.split(",")
    (fields(5).toString, fields(4).toFloat)
  }


     def main(args: Array[String]){

       Logger.getLogger("org").setLevel(Level.ERROR)

       val sc = new SparkContext("local[*]","First App")

       val data = sc.textFile("data/uber_data.csv")

       val mappedInput = data.map(extractCustomerPricePairs)

       val totalMilesByPurpose = mappedInput.reduceByKey((x,y) => (x + y))

       totalMilesByPurpose.foreach(println)

     }

}

如果您的數據缺乏milespurpose

start date, end date, category, start, stop, , 
start date, end date, category, start, stop, miles,

以下代碼不會在行尾讀取空值

val fields = line.split(",")

您可以-1讀取空值,直到行結束為

val fields = line.split(",", -1)

查看方案的start date: date time,end date: date time,category: string,start: string,stop: string,miles: float,purpose: string

(fields(6).toString, fields(5).toFloat)似乎是正確的,因為當您分割一行時,它將轉換為從0索引開始的Array。 因此,為了更加安全,您可以在返回tuple時使用TryOption

 (Try(fields(6)) getOrElse("Empty"), Try(fields(5).toFloat) getOrElse(0F))

要么

(Option(fields(6)) getOrElse("Empty"), Option(fields(5).toFloat) getOrElse(0F))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM