林子雨、郑海山、赖永炫编著《Spark编程基础(Python版)》(教材官网)教材中的代码,在纸质教材中的印刷效果,可能会影响读者对代码的理解,为了方便读者正确理解代码或者直接拷贝代码用于上机实验,这里提供全书配套的所有代码。

查看所有章节代码

第5章 Spark SQL

from pyspark import SparkContext,SparkConf

from pyspark.sql import SparkSession

spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()

>>> df=spark.read.json("file:///usr/local/spark/examples/src/main/resources/people.json")

>>> df.show()

>>> peopleDF = spark.read.format("json").\

... load("file:///usr/local/spark/examples/src/main/resources/people.json")

>>> peopleDF.select("name", "age").write.format("json").\

... save("file:///usr/local/spark/mycode/sparksql/newpeople.json")

>>> peopleDF.select("name").write.format("text").\

... save("file:///usr/local/spark/mycode/sparksql/newpeople.txt")

>>> peopleDF = spark.read.format("json").\

... load("file:///usr/local/spark/mycode/sparksql/newpeople.json")

>>> peopleDF.show()

>>> df=spark.read.json("file:///usr/local/spark/examples/src/main/resources/people.json")

>>>df.printSchema()

>>>df.select(df["name"],df["age"]+1).show()

>>> df.filter(df["age"]>20).show()

>>> df.groupBy("age").count().show()

>>> df.sort(df["age"].desc()).show()

>>> df.sort(df["age"].desc(),df["name"].asc()).show()

>>> from pyspark.sql import Row

>>> people = spark.sparkContext.\

... textFile("file:///usr/local/spark/examples/src/main/resources/people.txt").\

... map(lambda line: line.split(",")).\

... map(lambda p: Row(name=p[0], age=int(p[1])))

>>> schemaPeople = spark.createDataFrame(people)

#必须注册为临时表才能供下面的查询使用

>>> schemaPeople.createOrReplaceTempView("people")

>>> personsDF = spark.sql("select name,age from people where age > 20")

#DataFrame中的每个元素都是一行记录,包含name和age两个字段,分别用p.name和p.age来获取值

>>> personsRDD=personsDF.rdd.map(lambda p:"Name: "+p.name+ ","+"Age: "+str(p.age))

>>> personsRDD.foreach(print)

Name: Michael,Age: 29

Name: Andy,Age: 30

>>> from pyspark.sql.types import *

>>> from pyspark.sql import Row

#下面生成“表头”

>>> schemaString = "name age"

>>> fields = [StructField(field_name, StringType(), True) for field_name in schemaString.split(" ")]

>>> schema = StructType(fields)

#下面生成“表中的记录”

>>> lines = spark.sparkContext.\

... textFile("file:///usr/local/spark/examples/src/main/resources/people.txt")

>>> parts = lines.map(lambda x: x.split(","))

>>> people = parts.map(lambda p: Row(p[0], p[1].strip()))

#下面把“表头”和“表中的记录”拼装在一起

>>> schemaPeople = spark.createDataFrame(people, schema)

#注册一个临时表供下面查询使用

>>> schemaPeople.createOrReplaceTempView("people")

>>> results = spark.sql("SELECT name,age FROM people")

>>> results.show()

+-------+---+

| name|age|

+-------+---+

|Michael| 29|

| Andy| 30|

| Justin| 19|

+-------+---+

sudo service mysql start

mysql -u root -p #屏幕会提示输入密码

mysql> create database spark;

mysql> use spark;

mysql> create table student (id int(4), name char(20), gender char(4), age int(4));

mysql> insert into student values(1,'Xueqian','F',23);

mysql> insert into student values(2,'Weiliang','M',24);

mysql> select * from student;

>>> jdbcDF = spark.read \

.format("jdbc") \

.option("driver","com.mysql.jdbc.Driver") \

.option("url", "jdbc:mysql://localhost:3306/spark") \

.option("dbtable", "student") \

.option("user", "root") \

.option("password", "123456") \

.load()

>>> jdbcDF.show()

+---+--------+------+---+

| id| name|gender|age|

+---+--------+------+---+

| 1| Xueqian| F| 23|

| 2|Weiliang| M| 24|

+---+--------+------+---+

mysql> use spark;

mysql> select * from student;

InsertStudent.py

#!/usr/bin/env python3

from pyspark.sql import Row

from pyspark.sql.types import *

from pyspark import SparkContext,SparkConf

from pyspark.sql import SparkSession

spark = SparkSession.builder.config(conf = SparkConf()).getOrCreate()

#下面设置模式信息

schema = StructType([StructField("id", IntegerType(), True), \

StructField("name", StringType(), True), \

StructField("gender", StringType(), True), \

StructField("age", IntegerType(), True)])

#下面设置两条数据,表示两个学生的信息

studentRDD = spark \

.sparkContext \

.parallelize(["3 Rongcheng M 26","4 Guanhua M 27"]) \

.map(lambda x:x.split(" "))

#下面创建Row对象,每个Row对象都是rowRDD中的一行

rowRDD = studentRDD.map(lambda p:Row(int(p[0].strip()), p[1].strip(), p[2].strip(), int(p[3].strip())))

#建立起Row对象和模式之间的对应关系,也就是把数据和模式对应起来

studentDF = spark.createDataFrame(rowRDD, schema)

#写入数据库

prop = {}

prop['user'] = 'root'

prop['password'] = '123456'

prop['driver'] = "com.mysql.jdbc.Driver"

studentDF.write.jdbc("jdbc:mysql://localhost:3306/spark",'student','append', prop)

mysql> select * from student;

+------+-----------+--------+------+

| id | name | gender | age |

+------+-----------+--------+------+

| 1 | Xueqian | F | 23 |

| 2 | Weiliang | M | 24 |

| 3 | Rongcheng | M | 26 |

| 4 | Guanhua | M | 27 |

+------+-----------+--------+------+

4 rows in set (0.00 sec)

spark python编程 林子雨_林子雨编著《Spark编程基础(Python版)》教材第5章的命令行和代码...相关推荐

  1. python 小说cms系统_狂雨小说cms开源系统附安装教程-狂雨小说CMS系统(外加一套采集规律)下载两款优化版-西西软件下载...

    狂雨小说CMS系统(外加一套采集规律)是一款狂雨小说cms建站内容管理平台系统,内置标签模版,即使不懂代码的前端开发者也可以快速建立一个漂亮的小说网站.用狂雨小说cms搭建自己的小说站. 系统要求 P ...

  2. hive编程指南电子版_第三篇|Spark SQL编程指南

    在<第二篇|Spark Core编程指南>一文中,对Spark的核心模块进行了讲解.本文将讨论Spark的另外一个重要模块--Spark SQL,Spark SQL是在Shark的基础之上 ...

  3. python scratch 图形化_走进Scratch图形化编程

    说起编程大部分家长都是云里雾里,有的认为自己上大学时都搞不懂,更别说孩子了:有的认为码农那么枯燥,我不要把自己孩子培养当程序员:还有的认为编程离我们那么远学不学无所谓:还有的~~今天我们就从scrat ...

  4. python简单游戏程序设计_有趣又好玩的9个Python编程小游戏、简直太棒了

    打开搜狗搜索APP,查看更多精彩资讯 学习编程对大多数人来说是枯燥而无聊,大家有时候往往会觉得精神崩溃,提不起学习的兴趣,因此从入门到放弃,面临这种困境该怎么办呢? 这时候就有一些大牛设计出用游戏来学 ...

  5. spark需要maven管理吗_使用Eclipse编写Spark应用程序(Scala+Maven)

    点击这里观看厦门大学林子雨老师主讲<大数据技术原理与应用>授课视频 [版权声明]博客内容由厦门大学数据库实验室拥有版权,未经允许,请勿转载! [返回Spark教程首页] 对Scala代码进 ...

  6. python 进程生命周期_计算客户生命周期价值的python解决方案

    python 进程生命周期 By Lisa Cohen, Zhining Deng, Shijing Fang, and Ron Sielinski 由丽莎·科恩,志宁邓,石井方和罗恩Sielinsk ...

  7. python批量处理视频教程_《自拍教程72》Python批量重命名视频文件,AV专家必备!...

    案例故事: 任何一款终端产品只要涉及视频播放,就肯定涉及视频的解码播放测试, 作为一名专业的多媒体测试人员,我们需要一堆的规范的标准视频测试文件, 但是发现现有的视频资源名字命名的很随意比如:big_ ...

  8. python批量命名教程_《自拍教程69》Python 批量重命名音频文件,AV专家必备!

    本篇主要学习如何Python自定义模块并调用该模块,并重点介绍Python正则表达式的强大的文本处理能力. 案例故事:任何一款终端产品只要涉及音频输出,就肯定涉及音频的解码, 作为一名专业的AV (A ...

  9. python交互式环境执行_如何在交互式环境中执行Python程序

    如何在交互式环境中执行Python程序 相信接触过Python的小伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同C d ...

  10. python是什么系统_最齐全、最系统的python教程

    python教程(后面有彩蛋) python教程目录 学python都用来干嘛的? 主要就是"简单啊"."收入高啊"."人生苦短,我用Python&q ...

最新文章

  1. 双链表偶数节点求和java_java--删除链表偶数节点
  2. IM消息送达保证机制实现(二):保证离线消息的可靠投递
  3. Java 使用枚举类的实例
  4. 转: Springboot — 用更优雅的方式发HTTP请求(RestTemplate详解)
  5. 热启动必须联网吗_供暖结束,地暖是关闭供水阀门还是关闭回水阀门?你做对了吗?...
  6. 电子科大计算机2014级,电子科大-计算机-操作系统实验报告-2014级.docx
  7. 改善C#程序的建议8:避免锁定不恰当的同步对象
  8. Vue 单页面应用 把公共组件放在 app.vue 但是我希望某个页面没有这些公共组件怎么办???(比如登陆页面)
  9. js数组去重的4个方法
  10. 超级计算机能算数学题吗,圆周率到底能不能算尽?人类拿超级计算机算了一下,结果不敢相信...
  11. Linux用scp实现无密码传输文件和目录(使用密钥)
  12. 计算机编码详解_什么是计算机编码?计算机编码的起源与操作系统是如何解码的。
  13. 关于网页数据导入excel问题
  14. 浏览器怎么截图,这个快捷键截图也太好用了吧
  15. 在线qq的html代码,网页QQ
  16. EI CCIE企业基础架构技术 什么是DNAC ?-IELAB
  17. Python最抢手、Java最流行、Go最有前途,7000位程序员揭秘2019软件开发现状
  18. leetcode 21.合并有序列表(js)
  19. Firefox 禁止中国用户!!
  20. Druid的简介及功能?

热门文章

  1. Windows注册表内容详解
  2. 戴尔服务器进入pxe启动
  3. 魔方怎么更改计算机名,软媒魔方怎么通过设置向导进行设置
  4. ❤️制作人工智能QQ机器人,视频教程+源码❤️内容超级丰富,慢慢看!
  5. 高级JAVA开发 分布式系统部分
  6. java开发工程师面试问题大全及答案大全
  7. Java5种算术运算符,Java算术运算符
  8. Qt5.2.1 + VS2012 环境配置
  9. 深入浅出SSM框架流程以及原理
  10. SSM框架原理以及流程简略