天天看點

DataFrame和DataSets概述

産生背景:

   它不是SparkSQl提出的,而是早在R,Pandas語言就有了

   想提供閱聽人廣的API

   RDD和MapReduce程式設計門檻高

概念:

A DataFrame is a Dataset organized into named column(以列(列名,列的類型,列值)的形式構成分布式資料集,按照列賦予不同名稱

A Dataset is a distributed collection of data(RDD with schema)

It is conceptually equivalent to a table in a relational database or a data frame in R/Python, but with richer optimizations under the hood

An abstraction for selecting,filtering,aggregation,and plotting structured data

Previous SchemaRDD(SPark<1.3)

DataFrame對比RDD:

    RDD:

        Java/scala==>jvm

        python=>python runtime(執行效率不一定)

    DataFrame:

      Java/scala/python==>Logic Plan(執行效率一樣)

      可以處理結構體,map,數組

      友善實用

DataFrame常用API:

DataFrame與RDD互操作之一:反射方式

   使用反射來推斷包含了特定資料類型的RDD的中繼資料

   使用DataFrameAPI或者Sql方式程式設計

DataFrame與RDD互操作之一:程式設計方式

DataFrame與RDD互操作比較:

反射:case class 前提:事先需要知道你的字段,字段類型

程式設計:Row 如果第一種情況不能滿足你的要求(事先不知道列)

檢視内置函數:spark.sql("show functions").show;

DataSets概念:

   In the Scala API, 

DataFrame

 is simply a type alias of 

Dataset[Row]

DataFrame和DataSets概述

繼續閱讀