代码之家  ›  专栏  ›  技术社区  ›  pooja

如何在Spark Scala中将两个数组/数据集的大小修改为相同?

  •  0
  • pooja  · 技术社区  · 6 年前

    我有两个数组/数据集。

    scala> data1.collect
    res2: Array[Array[Double]] = Array(Array(1.0, 100.0), Array(0.7, 100.0), Array(0.8, 50.0))
    
    scala> data2.collect
    res3: Array[Array[Double]] = Array(Array(0.25, 0.0, 0.0), Array(1.0, 125.0, 0.0), Array(0.5, 0.0, 20.0), Array(0.5, 0.0, 15.0))
    

    我想要 data1 data2 大小相同(内部阵列的数量应相同,以 数据1 内部阵列的数量为3且在 数据2 是4)。我想加一个 Array(0.0, 0.0) 或是同样数量的 阵列(0.0,0.0) 在里面 数据1 因为它存在于 数据2 .

    请告诉我怎么做。

    1 回复  |  直到 6 年前
        1
  •  1
  •   Shaido MadHadders    6 年前

    首先,找出需要添加到 data1 数据集。使用示例中的一些数据:

    val data1 = Seq(Seq(1.0, 100.0), Seq(0.7, 100.0), Seq(0.8, 50.0))
      .toDF("col1").as[Array[Double]]
    val data2 = Seq(Seq(0.8, 50.0), Seq(1.0, 125.0, 0.0), Seq(0.5, 0.0, 20.0), Seq(0.5, 0.0, 15.0))
      .toDF("col1").as[Array[Double]]
    
    val diff = data2.count() - data1.count() 
    

    在这种情况下 diff 将具有值1。

    接下来,使用适当数量的行创建一个新的数据集,其中只包含 Array(0.0, 0.0) 这应该附在后面。然后将此新数据集添加到 数据1 通过使用 union :

    val appendData = Seq.fill(diff.toInt)(Array(0.0, 0.0)).toDF("col1").as[Array[Double]]
    val data3 = data1.union(appendData)
    

    结果:

    +------------+
    |        col1|
    +------------+
    |[1.0, 100.0]|
    |[0.7, 100.0]|
    | [0.8, 50.0]|
    |  [0.0, 0.0]|
    +------------+