spark Scala是一个简单的加法和其他数学计算
嗨,我是apache Spark的新手,在我的用例中,我将有3个输入,都存在于HDFS中,我需要从HDFS中的文件中提取数据,添加两个数据,并将结果与第三个数据分开,我如何继续spark Scala是一个简单的加法和其他数学计算,scala,hadoop,apache-spark,Scala,Hadoop,Apache Spark,嗨,我是apache Spark的新手,在我的用例中,我将有3个输入,都存在于HDFS中,我需要从HDFS中的文件中提取数据,添加两个数据,并将结果与第三个数据分开,我如何继续 感谢您的快速回复。类似的方法应该可以: import org.apache.spark.SparkContext import org.apache.spark.SparkContext._ import org.apache.spark.SparkConf import org.apache.spark
感谢您的快速回复。类似的方法应该可以:
import org.apache.spark.SparkContext
import org.apache.spark.SparkContext._
import org.apache.spark.SparkConf
import org.apache.spark.rdd.RDD
val conf = new SparkConf().setAppName("spark-scratch").setMaster("local")
val sc = new SparkContext(conf)
val A = sc.textFile("/user/root/spark/cc.dat").map(_.split(",")).map(fc => (fc(3).toInt))
val B = sc.textFile("/user/root/spark/aci.dat").map(_.split(",")).map(fc => (fc(4).toInt))
val C = sc.textFile("/user/root/spark/bta.dat").map(_.split(",")).map(fc => (fc(5).toInt))
val calc = { r: ((Int, Int), Int) =>
val ((a, b), c) = r
a * b * c / 12
}
val result = (A zip B zip C).map(calc)
它可以编译,但我没有测试它您的意思是要将A的第一个元素添加到B的第一个元素,依此类推?A.zipB.mappcase A,b=>A+b/C看起来应该满足您的要求。另外请注意,您可以在第一个映射中提取拆分数组的第四个或第三个元素,你可以看到,val A数据是从A.dat文件中提取的,val B数据是从B.dat文件中提取的,我应该加上A和B,乘以c,除以12。但是你并没有真正回答我的问题,只是重复了你在原始问题中已经说过的。A和B是一个RDD,因此包含许多行,每个行都有一个值。您是否希望将这些值相加,然后按C、第一到第一、第二到第二等等进行分隔?如果是这样的话,我的代码建议就是这样做的,例如a.dat包含被视为键的r0,所有其他r1、r2、r3、r4都是值,而在b.dat中我有r0、r1、r2、r3、r4。如果r1是键,其他都是值,保持a.dat中的r0和b.dat中的r1为键,我需要将a.dat中的r4与b.dat中的r3相加,我需要得到不带键的r4+r3相加结果的值,结果应与C相乘,相乘结果应除以12。A+B*C/12简单的解释方式。