如何在Apache Spark中的两个单独数据范围内执行算术操作



我有两个数据框,如下所示,每个排仅一个行和一个列。两者都有两个不同的数字值。

我如何在这两个数据帧值上执行或实现其他算术操作?

请帮助。

首先,如果这些数据范围包含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

相关内容

  • 没有找到相关文章

最新更新