我有两个数据框,如下所示,每个排仅一个行和一个列。两者都有两个不同的数字值。
我如何在这两个数据帧值上执行或实现其他算术操作?
请帮助。
首先,如果这些数据范围包含a single 记录每个 - 任何进一步的火花使用可能会浪费(火花旨在用于大数据集,小型数据集将在本地更快地处理)。因此,您只需使用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
如果出于某种原因,您确实要一直使用DataFrames,则可以使用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|
// +---+
如果您的dataframes为
scala> df1.show(false)
+------+
|value1|
+------+
|2 |
+------+
scala> df2.show(false)
+------+
|value2|
+------+
|2 |
+------+
您可以通过以下
获得值scala> df1.take(1)(0)(0)
res3: Any = 2
但是数据类型是Any
,在我们进行算术操作之前,需要进行类型铸造
scala> df1.take(1)(0)(0).asInstanceOf[Int]*df2.take(1)(0)(0).asInstanceOf[Int]
res8: Int = 4