精华内容
下载资源
问答
  • 1. 什么是DataFrame DataFrame的前身是SchemaRDD, 从Spark 1.3.0开始SchemaRDD更名为DataFrame. 与SchemaRDD的主要区别是: DataFrame不再直接继承自RDD, 而是...DataFrame是一种以RDD为基础的分布式数据集, 类似于...

    1. 什么是DataFrame

    • DataFrame的前身是SchemaRDD, 从Spark 1.3.0开始SchemaRDD更名为DataFrame.
    • 与SchemaRDD的主要区别是: DataFrame不再直接继承自RDD, 而是自己实现了RDD的绝大多数功能.但仍旧可以在DataFrame上调用RDD方法将其转换为一个RDD
    • DataFrame是一种以RDD为基础的分布式数据集, 类似于传统数据库的二维表格, DataFrame带有Schema元信息, 即DataFrame所表示的二维表数据集的每一列都带有名称和类型, 但底层做了更多的优化.
    • DataFrame可以从很多数据源构建, 比如: 已存在的RDD, 结构化文件, 外部数据库, Hive表.

    2. DataFrame与RDD的区别

    • RDD可以看做分布式的对象的集合, Spark并不知道对象的详细模式信息.
    • DataFrame可以看做分布式的Row对象的集合, 其提供了由列组成的详细模式信息, 使得Spark SQL可以进行某些形式的执行优化.

    DataFrame和普通RDD的逻辑架构区别如下图所示:
    在这里插入图片描述

    • 左侧的**RDD[Person]**虽然以Person为类型参数, 但Spark框架本身不了解Person类的内部结构.
    • 右侧的DataFrame却提供了详细的结构信息, 使得Spark SQL可以清楚地知道该数据集中包含哪些列,每列的名称和类型各是什么.DataFrame多了数据的结构信息, 即Schema. 这样看起来就像一张表.
    • DataFrame还配套了新的操作数据的方法, DataFrame API(如df.select())和SQL(select id, name from xx_table where…)
    • DataFrame还引入了off-heap, 意味着JVM堆以外的内存, 这些内存直接受操作系统管理(而不是JVM). Spark能够以二进制的形式序列化数据(不包括结构)到off-heap中,当要操作数据时, 就直接操作off-heap内存. 由于Spark理解Schema, 所以知道该如何操作.
    • RDD是分布式的Java对象集合. DataFrame是分布式的Row对象集合. DataFrame除了提供了比RDD更丰富的算子以为, 更重要的特点是提升执行效率, 减少数据读取以及执行计划的优化.
    • 通过DataFrame APISQL处理数据, 会自动经过**Spark优化器(Catalyst)**的优化,即使程序或sql不高效, 也可以运行的很快.

    3. DataFrame与RDD的优缺点

    3.1 RDD的优缺点

    • 优点
      1. 编译时类型安全, 编译时就能检查出类型错误
      2. 面向对象的编程风格, 直接通过对象调用方法的形式来操作数据.
    • 缺点
      1. 序列化和反序列化的性能开销, 无论是集群间的通信, 还是IO操作都需要对对象的结构和数据进行序列化和反序列化.
      2. GC的性能开销, 频繁的创建和销毁对象,势必会增加GC

    3.2 DataFrame的优缺点

    优点:

    • DataFrame通过引入schema和off-heap(不在堆里面的内存,指的是除了不在堆的内存,使用操作系统上的内存)
    • Spark通过schame就能够读懂数据, 因此在通信和IO时就只需要序列化和反序列化数据, 而结构的部分就可以省略了;通过off-heap引入,可以快速的操作数据,避免大量的GC。
      以上两点解决RDD频繁浪费GC的缺点.
      缺点:
    • 但是却丢了RDD的优点,DataFrame不是类型安全的.
    • API也不是面向对象风格的。
    展开全文
  • pandas.core.frame.DataFrame是什么数据结构,为什么要如此取值 [ ]中嵌套[ ] bmi_life_model.fit(bmi_life_data[['BMI']], bmi_life_data[['Life expectancy']])

    pandas.core.frame.DataFrame是什么数据结构,为什么要如此取值  [ ]中嵌套[ ]

    bmi_life_model.fit(bmi_life_data[['BMI']], bmi_life_data[['Life expectancy']])

     

     

    展开全文
  • 什么是PyODPS DataFrame

    2017-03-17 11:14:00
    最近已经写了几篇有关PyODPS DataFrame的文章,但是还是有些同学不明白PyODPS DataFrame是什么,以及能做什么事情。这篇文章,我会做出解释,以及简单介绍一下实现的原理。 PyODPS DataFrame 首先什么是DataFrame...

    最近已经写了几篇有关PyODPS DataFrame的文章,但是还是有些同学不明白PyODPS DataFrame是什么,以及能做什么事情。这篇文章,我会做出解释,以及简单介绍一下实现的原理。

    PyODPS DataFrame

    首先什么是DataFrame,我在以前的文章也解释过,我们可以把它认为是二维表结构。在单机上,数据科学家一般会使用R或者Python库pandas来做数据分析,DataFrame是它们上广泛使用的数据结构。在DataFrame上,我们可以做过滤、列筛选、join、union等等操作。

    因此,DataFrame也常常拿来和SQL做比较。我觉得主要的区别有:

    • 可能每个系统都有自己的SQL语法,但是对于DataFrame来说,可以把一套语法应用到不同的系统中,也就是说,各个系统上层的DataFrame语法可以是一致的。
    • DataFrame可以和本身的实现语言相关,因此能用到语言相关的特性,变量赋值、和语言三方库集成等等都不在话下。

    因此从第一点上来说,就能解释为什么我们的PyODPS DataFrame能在ODPS和本地上执行了。同样的语法,灵活性很高。

    对于PyODPS DataFrame来说,什么时候数据在MaxCompute上执行,什么时候在本地执行呢?这和用户的初始输入有关。当用户用MaxCompute表来初始化DataFrame的时候,后续计算就会在MaxCompute上执行。

    In [5]: iris = DataFrame(o.get_table('pyodps_iris'))
    
    In [6]: iris[iris.sepalwidth < 4].head(3)
    |==========================================|   1 /  1  (100.00%) 19s
    Out[6]: 
       sepallength  sepalwidth  petallength  petalwidth         name
    0          5.1         3.5          1.4         0.2  Iris-setosa
    1          4.9         3.0          1.4         0.2  Iris-setosa
    2          4.7         3.2          1.3         0.2  Iris-setosa
    

    比如例子里,我们用一张MaxCompute表来初始化,因此后续的计算都是在MaxCompute上执行的。而如果用pandas DataFrame来初始化,那么后续的计算就是在本地执行。

    我们前面一篇文章提过,我们从0.4版本开始带来一个特性,我们能join SQL和本地数据时,具体是怎样实现的呢?其实很简单,我们先把本地数据都计算完成,然后通过Tunnel上传到ODPS,再执行ODPS上的计算。

    在ODPS上计算时,和本地的计算能力是无关的,除非获取最终计算结果,数据也不会放在本地。

    对于在ODPS上的计算,目前来说,我们绝大多数的操作会使用ODPS SQL执行,但有部分情况,我们会使用tunnel执行,以提高执行速度。这些包括:

    • 对原始表筛选字段
    • 非分区表的切片,或分区表不选取分区或者选取前几个分区字段的切片
    • 非分区表取条数总数,或分区表选取分区的条数总数

    举个例子,我们的pyodps_iris是个非分区表,以下情况会使用tunnel,而不是转化成SQL执行。

    In [7]: iris.count()
    |==========================================|   1 /  1  (100.00%) 0s
    150
    
    In [10]: iris.exclude('name')[:3]
    |==========================================|   1 /  1  (100.00%) 0s
    
       sepallength  sepalwidth  petallength  petalwidth
    0          5.1         3.5          1.4         0.2
    1          4.9         3.0          1.4         0.2
    2          4.7         3.2          1.3         0.2
    

    可以看到,使用Tunnel的计算是很快的。因此,我们可以利用这个特性来从ODPS上下载少量数据,来利用本地计算来做debug。

    In [6]: iris[iris.sepalwidth < 4].head(3)  # 利用ODPS计算时,对小数据量是没有优势的
    |==========================================|   1 /  1  (100.00%) 19s
    Out[6]: 
       sepallength  sepalwidth  petallength  petalwidth         name
    0          5.1         3.5          1.4         0.2  Iris-setosa
    1          4.9         3.0          1.4         0.2  Iris-setosa
    2          4.7         3.2          1.3         0.2  Iris-setosa
    
    In [11]: local_iris = iris[:100].to_pandas(wrap=True)
    |==========================================|   1 /  1  (100.00%) 0s
    
    In [12]: local_iris[local_iris.sepalwidth < 4].head(3)
    |==========================================|   1 /  1  (100.00%) 0s
    Out[12]: 
       sepallength  sepalwidth  petallength  petalwidth         name
    0          5.1         3.5          1.4         0.2  Iris-setosa
    1          4.9         3.0          1.4         0.2  Iris-setosa
    2          4.7         3.2          1.3         0.2  Iris-setosa
    

    wrap为True时,等同于DataFrame(iris[:100].to_pandas())

    原理简述

    下面,简单来说下PyODPS DataFrame的计算原理。

    在某种意义上,PyODPS DataFrame可以认为是DSL(领域特定语言)。在到立即执行的操作(如execute)前,得到的都是一个AST(抽象语法树)。

    在交互式环境下,为了方便,我们在repr一个对象时,里面会调用立即执行的方法。因此,我们先把这个选项关掉,来看看执行后会是什么。

    In [13]: options.interactive = False
    
    In [14]: iris[iris.sepalwidth < 4][:10]
    Out[14]: 
    Collection: ref_0
      odps.Table
     name: odps_test_sqltask_finance.`pyodps_iris`
     schema:
     sepallength : double 
     sepalwidth : double 
     petallength : double 
     petalwidth : double 
     name : string 
    
    Collection: ref_1
      Filter[collection]
     collection: ref_0
     predicate:
     Less[sequence(boolean)]
     sepalwidth = Column[sequence(float64)] 'sepalwidth' from collection ref_0
     Scalar[int8]
     4
    
    Slice[collection]
      collection: ref_1
      stop:
     Scalar[int8]
     10
    

    现在我们把verbose打开,执行的中间过程会被打印出来,我们可以看到在ODPS上,目前会把这个AST给compile成ODPS SQL来执行。

    In [15]: options.verbose = True
    
    In [16]: iris[iris.sepalwidth < 4][:10].execute()
    
    Sql compiled:
    CREATE TABLE tmp_pyodps_07ec2ed0_88c5_4649_9413_0bce14f72d6f LIFECYCLE 1 AS 
    SELECT * 
    FROM odps_test_sqltask_finance.`pyodps_iris` t1 
    WHERE t1.`sepalwidth` < 4 LIMIT 10 logview: http://webconsole.odps.aliyun-inc.com:8080/logview/?*** |==========================================| 1 / 1 (100.00%) 32s Out[16]: sepallength sepalwidth petallength petalwidth name 0 5.1 3.5 1.4 0.2 Iris-setosa 1 4.9 3.0 1.4 0.2 Iris-setosa 2 4.7 3.2 1.3 0.2 Iris-setosa 3 4.6 3.1 1.5 0.2 Iris-setosa 4 5.0 3.6 1.4 0.2 Iris-setosa 5 5.4 3.9 1.7 0.4 Iris-setosa 6 4.6 3.4 1.4 0.3 Iris-setosa 7 5.0 3.4 1.5 0.2 Iris-setosa 8 4.4 2.9 1.4 0.2 Iris-setosa 9 4.9 3.1 1.5 0.1 Iris-setosa 

    而对于本地数据,我们在compile阶段会把AST转化成一个执行DAG(有向无环图),在执行阶段,会按照DAG的拓扑顺序来执行,得到最终结果。

    In [17]: local_iris[local_iris.sepalwidth < 4][:10].compile() Out[17]: <odps.dag.DAG at 0x10c233950>
    

    好了,至此,已经简单说明了PyODPS DataFrame框架的执行原理。

    PyODPS还很年轻,期待大家来使用、提feature、贡献代码。

    转载于:https://my.oschina.net/u/3154814/blog/861211

    展开全文
  • DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表.

    DataFrame是Python中Pandas库中的一种数据结构,它类似excel,是一种二维表.

    展开全文
  • python中 pandas的dataframe对象的dataframe.diff操作是什么意思? dataframe.diff()是dataframe对象的一阶差分,是将(原dataframe对象)- (dataframe向下平移一下得到的数据 ) 得到的数据。 diff函数是从数学...
  • Spark Dataset & DataFrame

    2020-12-12 17:42:38
    Dataset Dataset是什么 1 . Dataset是结构化数据 ...DataFrame是什么 1 . DataFrame类似一张关系型数据库 2 . 在DataFrame上操作,非常类似SQL语句 3 . DataFrame中有行和列,以及Scheam DataFrame如何创建
  • 使用DataFrame[col].dtype 来判断列类型。dtypes貌似也可以,暂时没看出来它们之间的差别。 注意如果某一列中有多种类型的数据,或者类型为str,那么会被识别为object。 类似如: 但是如果直接与object 相比...
  • RDD、DataFrame和DataSet容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同。 RDD和DataFrame RDD-DataFrame 上图直观地体现了DataFrame和RDD的区别。左侧的RDD[Person]虽然以Person为类型参数,但...
  • sparkSQL之DataFrameDataFrame概述DataFrame发展DataFrame是什么DataFrame和RDD的优缺点读取文件构建DataFrameDataFrame常用操作 DataFrame概述 DataFrame发展 DataFrame前身是schemaRDD,schemaRDD直接继承RDD,是...
  • 对于一个DataFrame A,A.loc[k]读取A中index为k的那一行。A.iloc[k]读取A中的第k行。 转载于:https://www.cnblogs.com/everfight/p/dataframe_loc_iloc.html
  • ...RDD、DataFrame和DataSet是容易产生混淆的概念,必须对其相互之间对比,才可以知道其中异同:DataFrame多了数据的结构信息,即schema。...DataFrame是分布式的Row对象的集合。 作者:jack
  • DataFrame是什么 DataFrame是一个以命名列方式组织的分布式数据集。在概念上,它跟关系型数据库中的一张表或者1个Python(或者R)中的data frame一样,但是比他们更优化。DataFrame可以根据结构化的数据文件、hive表、...
  • DataFrame是什么? 表格型的数据结构 DataFrame 是一个表格型的数据类型,每列值类型可以不同 DataFrame 既有行索引、也有列索引 DataFrame 常用于表达二维数据,但可以表达多维数据 DataFrame创建 从字典创建 &...
  • Spark SQL 1.3.0 DataFrame介绍、使用

    千次阅读 2015-10-07 19:38:23
    http://www.aboutyun.com/forum.php?mod=viewthread&tid=12358&page=11.DataFrame是什么?2.如何创建DataFrame?3.如何将普通RDD转变为DataFrame?4.如何使用DataFrame?5.在1.3.0中,提供了哪些完整的数据写入支持...
  • DataFrameDataFrame是什么?...DataFrame是什么? DataFrame的前身是SchemaRDD,从Spark 1.3.0开始SchemaRDD更名为DataFrame。 DataFrame与SchemaRDD的主要区别是:DataFrame不再直接继承自RDD,...
  • 内容目录一、初窥数据二、数据清洗三、数据预处理四、数据获取五、数据筛选六、数据汇总七、数据合并八、数据输出一、初窥数据我们先说一下DataFrame是什么:1、DataFrame是一种数...
  • 我们经常会在DataFrame操作的时候用到groupby(column_name)方法,这个方法会根据括号中的参数,一般字段名,来进行分组,也就是把这个字段相同的记录都分成一组,并且把他们的索引值放在一个列表当中。最终生成一...
  • 文章目录前言一、pandas是什么?二、使用步骤1.创建DataFrame2.选取数据列选取行选取条件选择(根据A列值选择B列)统计全局分组排序总结 前言 提示:这里可以添加本文要记录的大概内容: 例如:随着人工智能的不断...
  • Spark SQL之创建dataFrame的多种方法 1.Spark SQL是什么 ...2. dataFrame是什么 官网介绍 和RDD类似,dataFrame也是一个分布式抽象数据容器。并不存储数据,但会存储数据来源,数据操作以及数据结构化信
  • 所以很费解为什么df1和df2用join合并就得不到正确结果。求大神指导。 ![图片说明](https://img-ask.csdn.net/upload/201904/05/1554465090_652801.jpg)![图片说明]...
  • DataFrame是什么 在Spark中,DataFrame是一种按列组织的分布式数据集,概念上等价于关系数据库中一个表或者是Python中的 data frame,但是在底层进行了更丰富的优化。 DataFrame与RDD的对比以及联系 DataFrame里面...
  • 目录 4. Dataset 的特点 4.1 Dataset是什么? 4.2 即使使用Dataset的命令式API, 执行计划也依然会被优化 4.3 Dataset的底层是什么?...5.1 DataFrame是什么? 5.2 通过隐式转换创建DataFrame 5.3 通...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,002
精华内容 400
关键字:

dataframe是什么