2017-04-24 89 views
0
後獲取數據幀的數量

比方說,我的索引列追加到DataFrame如下:zipWithIndex

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 S和希望確保它們具有相同的行數。)有沒有辦法做到這一點,而無需通過再次DataFrame迭代?完成此操作最便宜的方法是什麼?

更多信息:dfWithIndex.count()得到結果,但因爲我們通過RDDzipWithIndex()迭代我希望我們可以節省一些計算。

+0

什麼是Spark版本? –

+0

@JacekLaskowski理想情況下1.6和2.1,但我可以分開代碼,以優化後者。 – kevinykuo

+1

如果它只是一個數,您可以嘗試使用蓄電池和增加它爲您打造的指數(http://spark.apache.org/docs/latest/programming-guide.html#accumulators) – Traian

回答

0

,如果你只是想比較的行數,最簡單的是count()

if dfWithIndex.count() == df2.count() 
    <some operation> 

但是你想找到指數的最大值,它不會是有效的,因爲它涉及GROUPBY操作

dfWithIndex.groupby().max(df1.id) 
相關問題