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)