我试图将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;)
由于