我有两个如下数据帧,每个数据帧只有一行和一列。两者都有两个不同的数值。
如何对这两个数据帧值执行或实现除法或其他算术运算?
请帮忙。
答案 0 :(得分:1)
首先,如果这些DataFrame每个都包含单个记录 - 任何进一步使用Spark都可能会浪费(Spark适用于大型数据集,小型数据集将在本地处理得更快)。因此,您可以使用first()
从那里继续收集这些单记录值:
import spark.implicits._
val df1 = Seq(2.0).toDF("col1")
val df2 = Seq(3.5).toDF("col2")
val v1: Double = df1.first().getAs[Double](0)
val v2: Double = df2.first().getAs[Double](0)
val sum = v1 + v2
如果出于某种原因,您确实想要一直使用DataFrame,可以使用crossJoin
将记录连接在一起,然后应用任何算术运算:
import spark.implicits._
val df1 = Seq(2.0).toDF("col1")
val df2 = Seq(3.5).toDF("col2")
df1.crossJoin(df2)
.select($"col1" + $"col2" as "sum")
.show()
// +---+
// |sum|
// +---+
// |5.5|
// +---+
答案 1 :(得分:0)
如果您将数据框设为
scala> df1.show(false)
+------+
|value1|
+------+
|2 |
+------+
scala> df2.show(false)
+------+
|value2|
+------+
|2 |
+------+
您可以通过执行以下操作获取值
scala> df1.take(1)(0)(0)
res3: Any = 2
但是dataType是Any
,在我们进行算术运算之前需要进行类型转换
scala> df1.take(1)(0)(0).asInstanceOf[Int]*df2.take(1)(0)(0).asInstanceOf[Int]
res8: Int = 4