Spark Scala测试 - 从文本文件中读取,生成其他输出并写入另一个文本文件

时间:2016-04-26 11:05:31

标签: python scala apache-spark

我试图将Spark Python程序转换为Scala。该程序的目标是使用输入数据源,根据输入源生成值,然后写入输出。

输入为1000,000行名义财产数据,包括物业ID,物业名称,物业价值,估值日期,每年租金收入,每年管理成本,征费,水和净租金收入。输出需要是未来100年预测的属性值,即除了第一年的数据(时间0)之外的100年。

到目前为止,这是我的代码:

import org.apache.spark.{SparkConf, SparkContext}

import scala.math.random

object PropertyInvestmentCalcs {
  def main(args: Array[String]) {
    //System.setProperty("hadoop.home.dir", "C:\\Users\\tjoha\\Documents\\spark-1.6.1-bin-hadoop2.6\\hadoop-2.6.4\\bin\\")

    val conf = new SparkConf().setMaster("local[6]").setAppName("Spark Pi")
    //.setJars(List("\\\\TJVRLAPTOP\\IntelliJ\\SBTScalaSparkPi\\target\\scala-2.10\\SBTScalaSparkPi-assembly-0.1.0-SNAPSHOT.jar"))
    val spark = new SparkContext(conf)

    val rdd = spark.textFile("C:\\Users\\tjoha\\Google Drive\\Besigheid\\Spark Project\\Spark Project - Project Property Value and Costs.csv")

    def calculations(row:String)
    {
      val data = row.split(",").map(_.trim)
      val number_of_years = 100
      val rate = 0.06
      data :+ "0"
      for (i <- 1 to number_of_years) {
        data(2) = (data(2).toFloat * (1 + rate)).toString
        data(9) = i.toString
        yield (','.join(data))
      }
    }
    rdd.flatMap(calculations: String).saveAsTextFile("C:\\Users\\tjoha\\Google Drive\\Besigheid\\Spark Project\\output")

    spark.stop()
  }
}

我将大部分内容从Python程序中转换出来但不确定我的yield,join和rdd.FlatMap函数是否有效?

自从发布上述功能以来,我提出了一些改变。看来我现在卡在使用计算功能的flatMap函数中。有什么想法吗?

object PropertyInvestmentCalcs {
  def main(args: Array[String]) {
    //System.setProperty("hadoop.home.dir", "C:\\Users\\tjoha\\Documents\\spark-1.6.1-bin-hadoop2.6\\hadoop-2.6.4\\bin\\")

    val conf = new SparkConf().setMaster("local[6]").setAppName("Spark Pi")
    //.setJars(List("\\\\TJVRLAPTOP\\IntelliJ\\SBTScalaSparkPi\\target\\scala-2.10\\SBTScalaSparkPi-assembly-0.1.0-SNAPSHOT.jar"))
    val spark = new SparkContext(conf)

    val rdd = spark.textFile("C:\\Users\\tjoha\\Google Drive\\Besigheid\\Spark Project\\Spark Project - Project Property Value and Costs.csv")

    def calculations(row:String){
      val data = row.split(",").map(_.trim)
      val number_of_years = 100
      val rate = 0.06
      data :+ "0"
      for (i <- 1 to number_of_years) {
        data(2) = (data(2).toFloat * (1 + rate)).toString
        data(9) = i.toString
      }
      data.mkString(",")
    }
    rdd.flatMap(calculations).saveAsTextFile("C:\\Users\\tjoha\\Google Drive\\Besigheid\\Spark Project\\output")

    spark.stop()
  }
}

这是编译错误:

  

错误:(30,17)类型不匹配;发现:所需单位:   TraversableOnce [?]       rdd.flatMap(calculate).saveAsTextFile(&#34; C:\ Users \ tjoha \ Google Drive \ Besigheid \ Spark Project \ output&#34;)

由于

0 个答案:

没有答案