数据基本操作

最近更新时间: 2019-11-26 15:30:11

数据准备 数据输入源:spark 包自带 peopele.txt 和 people.json 数据输入源路径:/usr/hdp/2.4.0.0-169/spark/examples/src/main/resources

people.json 
    {"name":"Michael"}  
    {"name":"Andy", "age":30}  
    {"name":"Justin", "age":19}  
people.txt 
    Michael, 29  
    Andy, 30  
    Justin, 19

通过 spark-shell 创建 DataFrame 操作

    #切换 linux 系统用户为 spark (默认登录托管HADOOP集群的用户为 root )  
    #su spark  
    #进入 spark-shell 模式,资源管理使用时 yarn ,部署方式是 client  
    $ spark-shell --master yarn-client  
    #创建 DataFrame  
    scala> val sqlContext = new org.apache.spark.sql.SQLContext(sc)
    scala> val df = sqlContext.read.json("file:///usr/hdp/2.4.0.0-169/spark/examples/src/main/resources/people.json")
    scala> df.show()
    +----+-------+
    | age|   name|
    +----+-------+
    |null|Michael|
    |  30|   Andy|
    |  19| Justin|
    +----+-------+          

RDD 转成 DataFrame(使 people.txt 非结构化的数据也可以运行SQL操作) 方式一:反射机制推断 RDD 模式,得到 DataFrame(在源码中找到DDToDataFrame项目即可) 方式二:以编程方式定义 RDD 模式,得到 DataFrame(在源码中找到DDToDataFrame项目即可) 执行

#第一步:将代码打包
#第二步:上传代码到 MASTER 的主机 spark 目录下,即 /home/spark/
#第三步:提交 job ,启动 DRIVER 程序
#注意:最后一个参数为整数类型,其中 1 为方式一将普通 RDD 转成 DataFrame ;其他为方式二
#sudo -u spark spark-submit --class com.托管Hadoop.rddToDF.Demo --master yarn-client /home/spark/RDDToDataFrame-1.0-SNAPSHOT.jar "file:///usr/hdp/2.4.0.0-169/spark/examples/src/main/resources/people.txt" "hdfs:///user/spark/out/person" 1      

• 数据加载 DataFrame 提供统一接口加载以下数据load()方式, format() 指定具体数据源格式 结构化数据 Parquet JSON Hive 表 JDBC 连接外部数据 shell 下的代码如下:

#首先,切入 shell 模式,部署方式为 yarn-client
  #cd /home/spark && sudo -u spark spark-shell --master yarn-client          
  #通过 spark-shell 为例, format() 指定加载格式,默认是 Parquet ,可以通过  spark.sql.sources.default 参数修改
  scala> val df = sqlContext.read.format("json").load("file:///usr/hdp/2.4.0.0-169/spark/examples/src/main/resources/people.json")
  #通过 save() 进行存盘
  df.select("name","age").write.format("parquet").save("/usr/qjjia/namesAndAges.parquet")
*注意:执行#cd /home/spark && sudo -u spark spark-shell --master yarn-client这条命令前请检查当前所在目录*