Apache Spark DataSet API:head(n:Int)vs take(n:Int)

时间:2017-07-17 07:54:52

标签: apache-spark apache-spark-sql spark-dataframe

Apache Spark Dataset API有两种方法,即head(n:Int)take(n:Int)

Dataset.Scala source包含

def take(n: Int): Array[T] = head(n) 

在这两个函数之间找不到执行代码的任何差异。为什么API有两种不同的方法可以产生相同的结果?

4 个答案:

答案 0 :(得分:2)

我已经尝试过&发现head(n)和take(n)给出完全相同的副本输出。两者都只以ROW对象的形式产生输出。

  
    
      

DF.head(2)

    
  

[Row(Transaction_date = u'1 / 2/2009 6:17',Product = u'Product1',Price = u'1200',Payment_Type = u'Mastercard',Name = u'carolina',City = u'Basildon',State = u'England',Country = u'United Kingdom'),Row(Transaction_date = u'1 / 2/2009 4:53',Product = u'Product2',Price = u'1200' ,Payment_Type = u'Visa',Name = u'Betina',City = u'Parkville',State = u'MO',Country = u'United States')]

  
    
      

DF.take(2)

    
  

[Row(Transaction_date = u'1 / 2/2009 6:17',Product = u'Product1',Price = u'1200',Payment_Type = u'Mastercard',Name = u'carolina',City = u'Basildon',State = u'England',Country = u'United Kingdom'),Row(Transaction_date = u'1 / 2/2009 4:53',Product = u'Product2',Price = u'1200' ,Payment_Type = u'Visa',Name = u'Betina',City = u'Parkville',State = u'MO',Country = u'United States')]

答案 1 :(得分:1)

  package org.apache.spark.sql
  /* ... */

  def take(n: Int): Array[T] = head(n)

答案 2 :(得分:0)

原因是,在我看来,Apache Spark Dataset API试图模仿包含head https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.head.html的Pandas DataFrame API。

答案 3 :(得分:0)

我认为这是因为Spark开发人员倾向于为它提供丰富的API,还有两种方法wherefilter完全相同。