Apache spark 获取zipWithIndex之后的数据帧计数

Apache spark 获取zipWithIndex之后的数据帧计数,apache-spark,Apache Spark,假设我将索引列附加到数据帧,如下所示: def addSequentialIndex( sc: SparkContext, df: DataFrame, id: String) : DataFrame = { val sqlContext = new org.apache.spark.sql.SQLContext(sc) sqlContext.createDataFrame( df.rdd.zipWithIndex.map

假设我将索引列附加到
数据帧
,如下所示:

  def addSequentialIndex(
    sc: SparkContext, 
    df: DataFrame, 
    id: String) : DataFrame = {
      val sqlContext = new org.apache.spark.sql.SQLContext(sc)
      sqlContext.createDataFrame(
        df.rdd.zipWithIndex.map {
            case (row: Row, i: Long) => Row.fromSeq(row.toSeq :+ i.toDouble)
        },
      df.schema.add(id, "double")
      )
  }

val dfWithIndex = addSequentialIndex(sc, df, "id")
我想得到
dfWithIndex
中的行数。(上下文:我想合并多个
数据帧
s,并希望确保它们具有相同的行数。)有没有一种方法可以在不再次遍历
数据帧的情况下执行此操作?实现这一点最便宜的方法是什么


更多信息:
dfWithIndex.count()
获取结果,但由于我们使用
zipWithIndex()迭代
RDD
,我希望我们可以节省一些计算。

如果您只想比较行数,最简单的方法是
count()


Spark版本是什么?@JacekLaskowski理想情况下是1.6和2.1,但我可以分离代码以优化后者。如果只是一个计数,您可以尝试使用累加器并在构建索引时递增它()考虑使用
rank
向现有数据帧添加索引列
if dfWithIndex.count() == df2.count()
     <some operation>
dfWithIndex.groupby().max(df1.id)