首页 > 数据库 >SparkSQL指南-快速开始(Python版)——(一)

SparkSQL指南-快速开始(Python版)——(一)

时间:2023-02-13 22:58:21浏览次数:44  
标签:指南 __ name show Python age df SparkSQL Spark

快速开始

创建环境

Spark程序主要分为三个阶段:

  • 创建环境
  • 数据操作
  • 关闭环境(在Streaming程序中为执行环境)
    下面是批处理的Spark SQL API的创建环境的类:SparkSession,其目的是为了创建基本的Spark SQL的环境。
from pyspark.sql import SparkSession
spark=SparkSession.builder\
	.appName("Spark SQL basic test")\
	.getOrCreate()

注意:一定要有“\”
其中还可以指定操作,比如连接Mongodb的操作,支持Hive的操作,具体的写法类似于如下:

from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark=SparkSession.builder\
        .appName("Spark SQL basic test")\
        .config("spark.some.config.option", "some-value")\
        .getOrCreate()

数据操作

创建DataFrames

创建DataFrames其实和python中的Datarame类似,也是一种表的表达方式。在Saprk中创建DataFrame的来源有很多,很多中API都是通过RDD来创建的,或者读取本地文件;但是在实际的任务中最常见的还是从数据库(Hive,Mongodb,MySQL)中创建DataFrame。由于这里是快速上手所以,该例子只使用read.json()
文件内容为:

{"name":"Kone"}
{"name":"Alices", "age":30}
{"name":"Bob", "age":19}

代码:

from pyspark.sql import SparkSession

if __name__ == '__main__':
    spark=SparkSession.builder\
        .appName("Spark SQL basic test")\
        .config("spark.some.config.option", "some-value")\
        .getOrCreate()
    
    df=spark.read.json("your json file path")
    df.show()

输出为:

+----+------+
| age|  name|
+----+------+
|null|  Kone|
|  30|Alices|
|  19|   Bob|
+----+------+

在DataFrames上的操作

上文讲过DataFrame相当于一个表,则对表有很多结构化的操作,那么其实MySQL的相关操作都可在Spark DataFrame上实现。下面是几种常见的操作:

  • 访问数据
    在访问数据中存在两种访问:属性(df.age)和索引(df["age"])。在Spark中更加建议后一种访问方式:
df=spark.read.json(jsonPath)
df.select(df.age).show()  # 使用属性来访问数据
df.select(df["age"]).show() # 使用索引来访问数据
df.select("name").show() # 使用select来访问数据

输出:

+----+
| age|
+----+
|null|
|  30|
|  19|
+----+

+----+
| age|
+----+
|null|
|  30|
|  19|
+----+

+------+
|  name|
+------+
|  Kone|
|Alices|
|   Bob|
+------+
  • 输出DataFrame的结构
    df.printSchema()

输出:

root
 |-- age: long (nullable = true)
 |-- name: string (nullable = true)
  • 对DataFrame的一列进行操作
df.select(df["name"], df["age"]+1).show()

输出:

+------+---------+
|  name|(age + 1)|
+------+---------+
|  Kone|     null|
|Alices|       31|
|   Bob|       20|
+------+---------+
  • 对表进行筛选
    下面筛选出name的以“K”开头的字符串。
df.filter(df["name"].startswith("K")).show()

输出:

+----+----+
| age|name|
+----+----+
|null|Kone|
+----+----+
  • 聚集操作
    原数据Json文件为:
{"name":"Kone"}
{"name":"Alices", "age":30}
{"name":"Bob", "age":19}
{"name":"Kven", "age":19}
{"name":"Dven", "age":18}

代码为:

df.groupBy(df["age"]).count().show()

输出:

+----+-----+
| age|count|
+----+-----+
|  19|    2|
|null|    1|
|  18|    1|
|  30|    1|
+----+-----+

使用反射推断模式

Spark SQL可以将Row对象的RDD转化为DataFrame,从而推断数据类型。行是通过将键值对列表作为kwargs传递给Row类来构造。

标签:指南,__,name,show,Python,age,df,SparkSQL,Spark
From: https://www.cnblogs.com/ALINGMAOMAO/p/17118157.html

相关文章

  • python中defaultdict 的用法
    defaultdict:当我使用普通的字典时,用法一般是dict={},添加元素的只需要dict[element]=value即,调用的时候也是如此,dict[element]=xxx,但前提是element字典里,如果不在字......
  • 电商网站Web自动化测试实战( 编写京东搜索脚本python+selenium框架)
    电商网站Web自动化测试实战(编写京东搜索脚本)1,打开京东页京东首页地址:https://www.jd.com/,故进入京东首页如下:2,打开浏览器开发者模式定位元素前需先打开浏览器开发者......
  • python pandas库总结-数据分析和操作工具
    参考:https://pandas.pydata.org/Input/output相关函数pandas.read_excel—将Excel文件读入pandas数据框支持读取xls,xlsx,xlsm,xlsb,odf,ods和odt文件扩展名,支持单......
  • python爬虫学习——列表
    namelist=[]#定义一个空的列表namelist1=["小张","小红","小李"]print(namelist1[0])print(namelist1[1])print(namelist1[2])testlist=[1,"测试"]#列表中......
  • python入门学习笔记004--趣学Python算法--第4例百钱百鸡
    中国古代数学家张丘建在他的《算经》中提出了一个著名的“百钱百鸡问题”:一只公鸡值五钱,一只母鸡值三钱,三只小鸡值一钱,现在要用百钱买百鸡,请问公鸡、母鸡、小鸡各多少只? ......
  • python 多线程 join
    当一个进程启动之后,会默认产生一个线程。这个线程就是主线程。如果是多线程时,主线程会创建多个线程。主线程执行完成后就会退出。多线程执行完成后也会退出。注意:只有守护......
  • Google Guice 用户指南 - Ⅰ:概览
    译者:kefate原文:https://github.com/google/guice/wiki/Overview大家好,我是kefate。今天开始我将会把GoogleGuice的官方文档陆续翻译一遍,水平有限,若有翻译不妥之处,还望......
  • python文件I/O
    1、打印到控制台:printif__name__=='__main__':print('hello')2、读取键盘输入:inputif__name__=='__main__':str1=input('请输入:')print(str1)3、打开......
  • Python_json类方法
    Python_json类方法importrequestsimportjsonheaders={"User-Agent":"Mozilla/5.0(LinuxAndroid6.0Nexus5Build/MRA58N)AppleWebKit/537.36(KHTML,l......
  • Selenium Python 问题汇总
    1.在自动化打开浏览器后会长时间加载,此时使用如下命令解决:driver.set_page_load_timeout(20)#设置浏览器超时加载时间driver.set_script_timeout(20)#这两种设置都进......