pyspark案例系列12-查找Spark官方文档

文章目录

  • 一. 进入官网选择对应的版本
  • 二. 快速入门
  • 三. Spark SQL, DataFrames 指导
    • 3.1 入门指南
      • 3.1.1 SparkSession
      • 3.1.2 创建DataFrame
      • 3.1.3 运行Spark SQL
    • 3.2 Spark支持的数据源
      • 3.2.1 读写csv文件
      • 3.2.2 读写Hive table
      • 3.2.3 读写MySQL
      • 3.2.4 Save Modes
  • 四. 性能调优
    • 4.1 在内存中缓存数据
    • 4.2 调优参数
    • 4.3 BROADCAST Hint for SQL Queries
  • 五. 分布式的SQL引擎
    • 5.1 运行Thrift JDBC/ODBC服务器
    • 5.2 运行Spark SQL命令行

一. 进入官网选择对应的版本

写Spark代码的时候经常会遇到一些问题,然后在网上找的例子不全而且偶尔还会出现一些问题,且Spark发展迅速,各个版本的语法都存在一定的差异。经常找到的demo都是不对的,拷贝执行会遇到意想不到的问题。

于是转而查看Spark官网,接下来我们简单的看看如何查询官网。

进入Spark官网:
https://spark.apache.org/
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MvxuduE1-1655341289963)(https://upload-images.jianshu.io/upload_images/2638478-23512012694d3d74.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-cZ3Aq5AE-1655341289965)(https://upload-images.jianshu.io/upload_images/2638478-cbbde1ed232cf453.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

二. 快速入门

  1. 选择 Programing Guides->Quick Start
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bTE0fZKg-1655341289966)(https://upload-images.jianshu.io/upload_images/2638478-6cb920e1ab2c7e7b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

  2. 对应的编程语言我们选择Python
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-JkzAgFyz-1655341289967)(https://upload-images.jianshu.io/upload_images/2638478-0ee06044bd0ff031.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

可以看到,如果使用Python操作Spark,我们一般是直接运行pyspark命令即可。

三. Spark SQL, DataFrames 指导

Python开发Spark的过程中,我们使用最多的就是Spark SQL和DataFrames。

3.1 入门指南

  1. 选择 Programing Guides->SQL,DataFrames,and Datasets
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-pxVhgrZ4-1655341289967)(https://upload-images.jianshu.io/upload_images/2638478-50d6fe7859237f1f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

  2. 选择左边的 Getting Started
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bt2XaEI1-1655341289968)(https://upload-images.jianshu.io/upload_images/2638478-484de6fa3081c80e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

3.1.1 SparkSession

SparkSession是所有Spark程序的开始
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-m6PDo1z9-1655341289969)(https://upload-images.jianshu.io/upload_images/2638478-30323dea60d49919.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

3.1.2 创建DataFrame

创建DataFrame非常简单,Spark从支持的数据源读取的数据就是DataFrame类型。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x41W7JRM-1655341289970)(https://upload-images.jianshu.io/upload_images/2638478-ee4940685094f3d2.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

3.1.3 运行Spark SQL

将上一步读取到的数据的DataFrame转换为一个临时视图后,我们就可以用SQL语句愉快的操作Spark程序了
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UaPKhRQy-1655341289971)(https://upload-images.jianshu.io/upload_images/2638478-6ac4407b7d3daec6.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

3.2 Spark支持的数据源

  1. 选择Data Sources
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jcKBSaie-1655341289971)(https://upload-images.jianshu.io/upload_images/2638478-863aa849e32b5e01.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

  2. Spark支持的数据源
    我们从下图可以看到,Spark支持的数据源包括:

  3. Parquet Files

  4. Orc Files

  5. Json Files

  6. Hive Tables

  7. Jdbc

  8. Avro Files
    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-s7Ca3b83-1655341289971)(https://upload-images.jianshu.io/upload_images/2638478-8b7c0af82dd64b97.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

3.2.1 读写csv文件

虽然上面没有写出读写CSV,其实Spark是支持读写CSV
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UQ6nCNTa-1655341289972)(https://upload-images.jianshu.io/upload_images/2638478-f3d463492876be21.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

读csv文件:

df = spark.read.load("examples/src/main/resources/people.csv",
                     format="csv", sep=":", inferSchema="true", header="true")

写csv文件:
coalesce(1)表示只写一个文件
save 表示目标文件夹的位置

  1. hdfs格式: hdfs://hp1:8020/user/juzhen
  2. 本地格式: file:///tmp/
df3.coalesce(1).write.format("csv").options(header='true', inferschema='true').save("hdfs://hp1:8020/user/juzhen")

3.2.2 读写Hive table

读写Hive表是我们实际开发过程中经常使用到的。
一般集群的spark配置默认可以访问hive的元数据,所以spark读写hive是非常的简单。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TZL7mknn-1655341289972)(https://upload-images.jianshu.io/upload_images/2638478-5e94853719f1f9ae.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

读取hive表:

df = spark.sql("SELECT * FROM src")

** 写入hive表:**

spark.sql("CREATE TABLE IF NOT EXISTS src (key INT, value STRING) USING hive")
spark.sql("LOAD DATA LOCAL INPATH 'examples/src/main/resources/kv1.txt' INTO TABLE src")

3.2.3 读写MySQL

Spark读写MySQL在实际开发过程中,使用的也表多
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fmLPGGVk-1655341289976)(https://upload-images.jianshu.io/upload_images/2638478-e48c12db3f01e835.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

读MySQL数据:

df1=spark.read.format("jdbc").options(url="jdbc:mysql://host:port/databasename",
                                       driver="com.mysql.jdbc.Driver",
                                       dbtable="(SELECT * FROM tablename) tmp",
                                       user="root",
                                       password="yourpassword").load()

写MySQL数据

df1.write.format("jdbc").options(url="jdbc:mysql://host:port/databasename", 
                                 driver="com.mysql.jdbc.Driver", 
                                 dbtable="tablename", 
                                 user="root", 
                                 password="yourpassword").mode('append').save()

3.2.4 Save Modes

保存操作可以选择使用SaveMode,该SaveMode指定如何处理现有数据(如果存在)。重要的是要认识到,这些保存模式不使用任何锁定,而且不是原子的。另外,当执行Overwrite时,数据将在写入新数据之前被删除。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rTQitWSS-1655341289977)(https://upload-images.jianshu.io/upload_images/2638478-6d5a70965e306046.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

四. 性能调优

https://spark.apache.org/docs/2.4.0/sql-performance-tuning.html
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-so1B1S45-1655341289977)(https://upload-images.jianshu.io/upload_images/2638478-85cd07b4dd0bb09e.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

4.1 在内存中缓存数据

Spark SQL可以通过调用Spark.catalogs.cachetable (“tableName”)或dataFrame.cache()来使用内存中的柱状格式缓存表。然后,Spark SQL将只扫描所需的列,并自动调优压缩,以最小化内存使用和GC压力。你可以调用spark.catalog.uncacheTable(“tableName”)来从内存中删除这个表。

内存缓存的配置可以通过SparkSession上的setConf方法或使用SQL运行SET key=value命令来完成。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YHsaE8N3-1655341289978)(https://upload-images.jianshu.io/upload_images/2638478-2b0a4aa1dbb9b2be.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

4.2 调优参数

以下选项还可用于调优查询执行的性能。这些选项有可能在未来的版本中被弃用,因为会自动执行更多的优化。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rrqbYU6y-1655341289978)(https://upload-images.jianshu.io/upload_images/2638478-61bcf04c8c6a14b9.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

4.3 BROADCAST Hint for SQL Queries

BROADCAST提示指导Spark在将指定的表与其他表或视图连接时广播指定的表。当Spark决定连接方法时,广播哈希连接(即BHJ)是首选的,即使统计值高于配置Spark.sql.autobroadcastjointhreshold。当连接的两端都指定时,Spark会广播统计信息较低的一端。注意Spark不保证总是选择BHJ,因为不是所有情况(例如完全外连接)都支持BHJ。当选择广播嵌套循环连接时,我们仍然尊重提示。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HaAcV1Zu-1655341289979)(https://upload-images.jianshu.io/upload_images/2638478-958350099a6e2323.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)]

五. 分布式的SQL引擎

https://spark.apache.org/docs/2.4.0/sql-distributed-sql-engine.html

Spark SQL还可以使用它的JDBC/ODBC或命令行接口充当分布式查询引擎。在这种模式下,终端用户或应用程序可以直接与Spark SQL交互,运行SQL查询,而不需要编写任何代码。

5.1 运行Thrift JDBC/ODBC服务器

这里实现的Thrift JDBC/ODBC服务器对应于Hive 1.2.1中的HiveServer2。您可以使用Spark或Hive 1.2.1附带的beeline脚本来测试JDBC服务器。

在Spark目录下执行如下命令启动JDBC/ODBC服务器。

./sbin/start-thriftserver.sh

这个脚本接受所有bin/spark-submit命令行选项,外加一个——hiveconf选项来指定Hive属性。您可以运行./sbin/start-thriftserver.sh——help获取所有可用选项的完整列表。默认情况下,服务器监听localhost:10000。你可以通过环境变量重写这个行为,例如:

export HIVE_SERVER2_THRIFT_PORT=
export HIVE_SERVER2_THRIFT_BIND_HOST=
./sbin/start-thriftserver.sh \
  --master  \
  ...

或系统配置:

./sbin/start-thriftserver.sh \
  --hiveconf hive.server2.thrift.port= \
  --hiveconf hive.server2.thrift.bind.host= \
  --master 
  ...

现在你可以使用beeline来测试Thrift JDBC/ODBC服务器:

./bin/beeline

直接连接JDBC/ODBC服务器:

beeline> !connect jdbc:hive2://localhost:10000

Beeline会要求你输入用户名和密码。在非安全模式下,只需在计算机上输入用户名和空白密码。为了安全模式,请遵循beeline文件中给出的说明。

Hive的配置是通过把你的Hive -site.xml, core-site.xml和hdfs-site.xml文件放在conf/中完成的。

你也可以使用Hive自带的直线脚本。

Thrift JDBC服务器还支持通过HTTP传输发送Thrift RPC消息。在系统属性或conf/的hive-site.xml文件中使用如下设置启用HTTP模式:

hive.server2.transport.mode - Set this to value: http
hive.server2.thrift.http.port - HTTP port number to listen on; default is 10001
hive.server2.http.endpoint - HTTP endpoint; default is cliservice

为了测试,使用beeline以http模式连接JDBC/ODBC服务器:

beeline> !connect jdbc:hive2://:/?hive.server2.transport.mode=http;hive.server2.thrift.http.path=

5.2 运行Spark SQL命令行

Spark SQL CLI是一个方便的本地运行Hive metastore服务的工具,用于执行命令行输入的查询。注意Spark SQL CLI不能与Thrift JDBC服务器通信。

在Spark目录下执行如下命令启动Spark SQL命令行:

./bin/spark-sql

Hive的配置是通过把你的Hive -site.xml, core-site.xml和hdfs-site.xml文件放在conf/中完成的。您可以运行./bin/spark-sql——help获取所有可用选项的完整列表。

你可能感兴趣的:(大数据和数据仓库,#,Spark,spark,big,data,hive)