我们假设我将索引列附加到DataFrame
,如下所示:
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
中的行数。 (上下文:我想合并多个DataFrame
并希望确保它们具有相同的行数。)有没有办法在不再遍历DataFrame
的情况下执行此操作?什么是最便宜的方法来实现这个目标?
更多信息:dfWithIndex.count()
获取结果,但由于我们正在使用RDD
重复zipWithIndex()
我希望我们可以节省一些计算。
答案 0 :(得分:0)
如果您只想比较行数,最简单的是count()
if dfWithIndex.count() == df2.count()
<some operation>
但是你想找到索引的最大值,它不会有效,因为它涉及groupby操作
dfWithIndex.groupby().max(df1.id)