Spark - 使用除法运算符减少
Spark - Reduce with division operator
我有两套,一套是正样本,一套是负样本。数组中的第一个值是项目标识,第二个值是指这些项目的总和。
positive: Array[(String, Int)]
negative: Array[(String, Int)]
我想构造数组结果,其中将包含项目名称及其正负比作为浮点数。下面的命令returns我只有整数比。
val result = positive.union(negativeCount).reduceByKey((a, b) => (a / b)
请问如何使比率成为浮点数?
谢谢。
使用 toFloat
使其中一个整数浮点数
val result = positive.union(negativeCount)
.mapValues(_.toFloat)
.reduceByKey((a, b) => (a / b))
据我了解您的意图,您应该使用 join
而不是 union
val positive = sc.parallelize(Seq(("a", 1), ("b", 2)))
val negative = sc.parallelize(Seq(("a", 4), ("b", 1)))
val ratios = positive
.join(negative)
.mapValues{case (x: Int, y: Int) => x.toFloat / y}
ratios.collect
// Array[(String, Float)] = Array((a,0.25), (b,2.0))
使用数据框:
val ratiosDF = positive.toDF("pk", "pv")
.join(negative.toDF("nk", "nv"), $"pk" === $"nk")
.select($"pk".alias("k"), $"pv".divide($"nv").alias("v"))
ratiosDF.show
// +---+----+
// | k| v|
// +---+----+
// | a|0.25|
// | b| 2.0|
// +---+----+
使用 union
后跟 reduceByKey
没有任何意义,并且不能对值的顺序提供强有力的保证。
我有两套,一套是正样本,一套是负样本。数组中的第一个值是项目标识,第二个值是指这些项目的总和。
positive: Array[(String, Int)]
negative: Array[(String, Int)]
我想构造数组结果,其中将包含项目名称及其正负比作为浮点数。下面的命令returns我只有整数比。
val result = positive.union(negativeCount).reduceByKey((a, b) => (a / b)
请问如何使比率成为浮点数?
谢谢。
使用 toFloat
val result = positive.union(negativeCount)
.mapValues(_.toFloat)
.reduceByKey((a, b) => (a / b))
据我了解您的意图,您应该使用 join
而不是 union
val positive = sc.parallelize(Seq(("a", 1), ("b", 2)))
val negative = sc.parallelize(Seq(("a", 4), ("b", 1)))
val ratios = positive
.join(negative)
.mapValues{case (x: Int, y: Int) => x.toFloat / y}
ratios.collect
// Array[(String, Float)] = Array((a,0.25), (b,2.0))
使用数据框:
val ratiosDF = positive.toDF("pk", "pv")
.join(negative.toDF("nk", "nv"), $"pk" === $"nk")
.select($"pk".alias("k"), $"pv".divide($"nv").alias("v"))
ratiosDF.show
// +---+----+
// | k| v|
// +---+----+
// | a|0.25|
// | b| 2.0|
// +---+----+
使用 union
后跟 reduceByKey
没有任何意义,并且不能对值的顺序提供强有力的保证。