pyspark 入门

pyspark是python中的大数据处理工具,适用于大规模数据,弥补pandas在处理大规模数据时的不足。本文介绍了如何使用pyspark,包括初始化SparkSession、DataFrame API和SQL查询,以及常用函数和调优思路。通过pyspark可以高效处理数据,进行数据清理和可视化,尤其适合DataFrame操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

为什么用

python中pandas是数据分析的利器,具有并行的特兹那个,而且函数和数据计算的方法非常方便,是数据分析中的瑞士军刀。但是受限于单个机器性能和配置的限制,当大规模数据,比如100G-10TB规模的数据时,pandas就显得局限了,就像瑞士军刀杀牛,难以下手。这时就需要基于分布式计算的大数据工具spark,是基于分布式计算,可以基于hadoop和hive,进行分布式的数据计算,同时spark具有python API,可以通过类似python的语法,无门槛的过渡。

怎么用

pyspark支持RDD和DataFrame的数据类型,但是RDD在python中相比于scala和R语言,是非常慢的,而DataFrame使性能在各种语言中都保持稳定。所以我们可以试用pyspark的DataFrame对大规模数据进行数据清理,然后转为pandas.dataframe,进行数据可视化。

初始化类 class pyspark.sql.SparkSession 类

spark = SparkSession.builder \
...     .master("local") \
...     .appName("Word Count") \
...     .config("spark.some.config.option", "some-value") \
...     .getOrCreate

Builder for SparkSession 这个就是生成一个 sparksession 实例。他下面有一些支持的函数
master: 设置 spark master 的 url 。由于我们集群使用的是 spark on yarn 的模式,所以可以用选择不设置这个参数。

appName: 在程序运行的时候看到的应用名称。

config: 其实其他参数也是调用 .config 设置相应的 config 参数,例如 .master 就是调用了 .config(“spark.master”, master)。

enableHiveSupport: 启动对 hive 的支持。例如支持 hivesql 以及 hive udf 等。

getOrCreate: 得到一个现成的 SparkSession ,如果没有就生成一个。

  • SparkSession.catalog:
    提供一个接口来操作 create drop alter query 库或者表,比如:
catalog.listTables().select($"name").show(2,false)
  • SparkSession.createDataFrame:
    可以获得从 rdd python list 和 pandas df 创建 df 的能力。下面贴一下官方的例子:
l = [('Alice', 1)]
>>> spark.createDataFrame(l).collect()
[Row(_1=u'Alice', _2=1)]
>>> spark.createDataFrame(l, ['name', 'age']).collect()
[Row(name=u'Alice', age=1)]


>>> d = [{
   'name': 'Alice', 'age': 1}]
>>> spark.createDataFrame(d).collect()
[Row(age=1, name=u'Alice')]


>>> rdd = sc.parallelize(l)
>>> spark.createDataFrame(rdd).collect()
[Row(_1=u'Alice', _2=1)]
>>> df = spark.createDataFrame(rdd, ['name', 'age'])
>>> df.collect()
[Row(name=u'Alice', age=1)]
  • SparkSession.sql:
    使用sql方法返回的是df,例如:
>>> df.createOrReplaceTempView("table1")
>>> df2 = spark.sql("SELECT field1 AS f1, field2 as f2 from table1")
>>> df2.collect()
[Row(f1=1, f2=u'row1'), Row(f1=2, f2=u'row2'), Row(f1=3, f2=u'row3')]
  • SparkSession.table
    这个可以返回指定表的 df ,将表复制成df

函数说明

注意查看官方文档中函数说明的返回数据类型

  1. 查询
    1,.show(n),方法默认显示前10行
    2,spark.sql("select * from ").collect()

利用DataFrame API查询

  1. swimmers.count() 返回dataframe 的行数
  2. swimmers.select().filter().show() 返回筛选后数据

利用sql查询

  1. spark.sql(“select count(1) from swimmers”).show()
    sql语句和sql语言一致,也可以试用where 筛选

DataFrame函数说明

创建DataFrame

1.使用RDD来创建

rdd = sc.parallelize([("Sam", 28, 88), ("Flora", 28, 90), ("Run", 1, 60)])
df = rdd.toDF(["name", "age", "score"])
df.show()
df.printSchema()

# +-----+---+-----+
# | name|age|score|
# +-----+---+-----+
# |  Sam| 28|   88|
# |Flora| 28|   90|
# |  Run|  1|   60|
# +-----+---+-----+
# root
#  |-- name: string (nullable = true)
#  |-- age: long (nullable = true)
#  |-- score: long (nullable = true)

2. 使用python的DataFrame来创建

df = pd.DataFrame([['Sam', 28, 88], ['Flora', 28, 90], ['Run', 1, 60]],
                  columns=['name', 'age', 'score'])
print(">> 打印DataFrame:")
print(df)
print("\n")
Spark_df = spark.createDataFrame(df)
print(">> 打印SparkDataFrame:")
Spark_df.show()
# >> 打印DataFrame:
#     name  age  score
# 0    Sam   28     88
# 1  Flora   28     90
# 2    Run    1     60
# >> 打印SparkDataFrame:
# +-----+---+-----+
# | name|age|score|
# +-----+---+-----+
# |  Sam| 28|   88|
# |Flora| 28|   90|
# |  Run|  1|   60|
# +-----+---+-----+

3. 使用List来创建

list_values = [['Sam', 28, 88], ['Flora', 28, 90], ['Run', 1, 60]]
Spark_df = spark.createDataFrame(list_values, ['name', 'age', 'score'])
Spark_df.show()
# +-----+---+-----+
# | name|age|score|
# +-----+---+-----+
# |  Sam|
PySpark 是 Apache SparkPython API,它允许你利用 Python 编写分布式数据处理程序。Spark 是一个大数据处理框架,它提供了快速的、可扩展的、容错的大数据处理能力。PySpark 则是 SparkPython 实现,它允许你使用 Python 语言来编写 Spark 应用程序。 一个简单的 PySpark 入门程序通常包含以下几个步骤: 1. 初始化 SparkSession 对象,这是使用 PySpark 的入口。 2. 使用 SparkSession 来读取数据集或者创建 DataFrame。 3. 对数据进行转换和操作。 4. 将处理结果输出或者存储。 下面是一个简单的 PySpark 入门程序示例: ```python from pyspark.sql import SparkSession # 初始化 SparkSession 对象 spark = SparkSession.builder \ .appName("PySparkExample") \ .getOrCreate() # 读取数据创建 DataFrame(这里以本地的 CSV 文件为例) df = spark.read.csv("path/to/your/csvfile.csv", header=True, inferSchema=True) # 显示 DataFrame 中的前 20 行数据 df.show(20) # 对 DataFrame 进行简单的数据操作,比如选择某些列 selected_columns = df.select("column1", "column2") selected_columns.show() # 保存处理后的结果到一个新的 CSV 文件中 selected_columns.write.csv("path/to/your/output.csv", header=True) # 停止 SparkSession spark.stop() ``` 在这个例子中,我们首先导入了 `SparkSession` 类,并使用它来创建一个 SparkSession 实例。之后,我们读取了一个 CSV 文件到 DataFrame 中,并展示了数据的前 20 行。然后我们选择并展示了特定的列,并将结果保存到了一个新的 CSV 文件中。最后,我们关闭了 SparkSession 以释放资源。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值