--- Spark学习(陆)- Spark操作外部数据源

产生背景

每个Spark应用程序从读取数据开始,到保存数据结束

  • 加载和保存数据是不容易的
    比如大数据场景解析关系型数据库需要用工具如sqoop将数据转到hbase等。
  • 解析原始数据也不容易 :text/json/parquet
  • 数据直接的转换也麻烦
  • 数据集存储在各个存储系统中无法统一拉取和推送
    在这里插入图片描述

用户的需要:
方便快速从不同的数据源(json、parquet、rdbms),经过混合处理(json join parquet),再将处理结果以特定的格式(json、parquet)写回到指定的系统(HDFS、S3)上去

Spark SQL 1.2 ==> 外部数据源API

概念

External Data Source API

  • 一种集成各种外部数据的扩展方法
  • 可以使用各种格式和存储系统读写DataFrame
  • Data Source API可以自动裁剪列和推送过滤器到源(谓词下推):parquet/JDBO
  • Data Source API在Spark 1.2提出
    在这里插入图片描述

目标

  • 对于开发人员只需要构建针对外部数据源的库
    开发人员:是否需要把代码合并到spark中????
    比如weibo数据只需要通过–jars传入就行。
  • 对于使用人员通过DataFrames很容易加载和保持数据源
    用户
    读:spark.read.format(format)
    format
    build-in:内置的 json parquet jdbc csv(2.0+后属于内置)
    packages: 外部的比如微博的数据 并不是spark内置 https://spark-packages.org/
    写:people.write.format(“parquet”).save(“path”)

操作Parquet文件数据

parquet是无法直接查看的;所以这里就不提供数据了

  • spark.read.format(“parquet”).load(path)
  • df.write.format(“parquet”).save(path)
package com.kun.ExternalDataSource

import org.apache.spark.sql.SparkSession

/**
 * Parquet文件操作
 */
object ParquetApp {
   

  def main(args: Array[String]) {
   

    val spark = SparkSession.builder().appName("SparkSessionApp")
      .master("local[2]").getOrCreate()


    /**
     * spark.read.format("parquet").load 这是标准写法
     */
    val userDF = spark.read.format("parquet").load("file:///home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/users.parquet")

    userDF.printSchema()
    userDF.show()

    userDF.select("name","favorite_color").show

    userDF.select("name","favorite_color").write.format("json").save("file:///home/hadoop/tmp/jsonout")

    spark.read.load("file:///home/hadoop/app/spark-2.1.0-bin-2.6.0-cdh5.7.0/examples/src/main/resources/users.parquet")
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值