spark Scala是一个简单的加法和其他数学计算

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

嗨,我是apache Spark的新手,在我的用例中,我将有3个输入,都存在于HDFS中,我需要从HDFS中的文件中提取数据,添加两个数据,并将结果与第三个数据分开,我如何继续


感谢您的快速回复。

类似的方法应该可以:

  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简单的解释方式。