Spark SQL 初始2 之 DataFrame API(2.0)

什么是DataFrame

1.  DataFrame 是Spark SQL的主要数据抽象(RDD是Spark的主要数据抽象)
是相同模式行的分布式集合(这些行以命名的列方式组织),等同于关系数据库的表
支持关系操作(selecting, filtering, aggregating, and plotting structured data)。
2. DataFrame 支持从已存在的原生RDD或外部数据源来创建。
3. DataFrame 是延迟评估的,只有当用户调用输出操作,如count(),Spark SQL 才构建
物理计划来执行,在执行过程中采用了优化策略,比如只扫描某些列数据。

DataFrame的特点

1. DataFrame一旦构建就无法修改
2. DataFrame跟踪血缘信息来有效重计算丢失数据
3. DataFrame分布在worker中,可执行并行操作
4. DataFrame的数据集都是按指定列存储
5. DataFrame提供特定领域的语言(DSL)API来操作数据集

DataFrame的操作

1. DataFrame 中每行是Row对象,Row中的字段可以像属性一样被访问

2. DataFrame 有两类操作,分别是: transforms 和actions (这点与RDD相同)



创建DataFrame

1. 从Python集合(List)或Python数据分析库pandas中创建DataFrame

2.
一下代码是从RDD创建DataFrame的方法

val schamaString ="id,gender,height"

val conf =new SparkConf().setAppName("SQLTEST").setMaster("local")

val sc=new SparkContext(conf)

val peopleDataRDD=sc.textFile("/home/xuetao/Downloads/data.txt")

val sqlCtx=new SQLContext(sc)

val schemaArray=schamaString.split(",")

val schema=StructType(schemaArray.map(fieldName=>StructField(fieldName,StringType,true)))

val

rowRDD:RDD[Row]=peopleDataRDD.map(_.split("")).map(eachRow=>Row(eachRow(0),eachRow(1),eachRow(2)))

valpeopleDF=sqlCtx.createDataFrame(rowRDD,schema)

peopleDF.registerTempTable("people")

val hightMale170=sqlCtx.sql("select id, gender, height frompeople where height>170 and gender='M'")

println("Men whose height are more than 170:"+hightMale170.count())

sc.stop()



3.使用Select方法从DataFrame中选择一列或多列,返回一个
新的DataFrame

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值