一个专注于大数据技术架构与应用分享的技术博客

Spark-python入门

Spark是一个快速通用的大规模数据处理引擎,主要用于大数据处理和机器学习。Python作为一门强大灵活的编程语言,它的开源库PySpark,提供了与Spark的Python API互动的能力。本文将介绍如何使用PySpark进行数据处理和分析。

安装

运行PySpark需要以下步骤:

  1. 安装Java JDK,设置环境变量。
  2. 下载并安装Spark。建议使用Apache官网提供的二进制包。
  3. 安装Python 2.7.x (Spark 2.x目前不支持Python 3.x)
  4. 配置PySpark环境变量
export PYSPARK_PYTHON=python2.7
export SPARK_HOME=your/spark/installation
export PATH=$SPARK_HOME/bin:$PATH

PySpark应用

我们使用PySpark来进行数据处理、聚合以及可视化。 在本示例中,我们将使用MovieLens数据集。

  1. 下载数据集。

https://grouplens.org/datasets/movielens/ 中下载数据集,“ml-latest-small.zip”是最新的版本,这个版本包含了较少的数据,以便我们进行快速的数据探索。

  1. 解压数据集
unzip ml-latest-small.zip

以下是我们处理数据所要用到的文件:

  • links.csv: 电影ID、IMDB ID和TMDb ID 之间的链接。
  • movies.csv: 电影的详细信息
  • ratings.csv: 用户对电影的评分
  • tags.csv: 用户所打的电影标签
  1. 数据探索

我们将使用PySpark和Pandas来加载数据,并进行数据探索和处理。在PySpark中,我们使用SparkSession来加载CSV文件(或任何其他格式)。

from pyspark.sql import SparkSession

# 创建一个SparkSession
spark = SparkSession.builder.appName("MovieLens").getOrCreate()

# 加载CSV文件为DataFrames
links = spark.read.csv("ml-latest-small/links.csv", header=True)
movies = spark.read.csv("ml-latest-small/movies.csv", header=True)
ratings = spark.read.csv("ml-latest-small/ratings.csv", header=True)
tags = spark.read.csv("ml-latest-small/tags.csv", header=True)

# 显示前5条数据
links.show(5)
movies.show(5)
ratings.show(5)
tags.show(5)

# 打印DataFrame模式
print(links.printSchema())
print(movies.printSchema())
print(ratings.printSchema())
print(tags.printSchema())

# Spark的数据框转换为Pandas数据框
movies_pd = movies.toPandas()
ratings_pd = ratings.toPandas()
  1. 数据聚合和分析

接下来,我们将按照电影类别分组,计算平均分和评论次数。然后使用Pandas来将结果可视化。

import numpy as np
import matplotlib.pyplot as plt

# 按电影类别计算平均得分
grouped_ratings = ratings.groupBy("movieId").agg({"rating": "mean", "userId": "count"})
grouped_ratings = grouped_ratings.withColumnRenamed("avg(rating)", "avg_rating").withColumnRenamed("count(userId)", "num_ratings")
movie_ratings = grouped_ratings.join(movies, "movieId", "outer").select("movieId", "title", "genres", "avg_rating", "num_ratings")

# 根据平均得分排序并打印前10部电影
top_rated = movie_ratings.orderBy(movie_ratings.avg_rating.desc())
top_rated.show(10, False)

# 将电影的平均得分和评论次数可视化
x = movie_ratings.avg_rating.tolist()
y = movie_ratings.num_ratings.tolist()
area = np.pi * (15 * np.random.rand(len(x)))**2  # 为每个数据点分配随机的区域大小

fig, ax = plt.subplots()
ax.scatter(x, y, s=area, alpha=0.5)
ax.set_xlabel("Average Rating")
ax.set_ylabel("Number of Ratings")
plt.show()

以上代码将生成一个散点图:

散点图

在本示例中,我们介绍了如何使用PySpark来加载、处理和分析数据集。PySpark提供了一个高效灵活的工具来进行大规模数据处理和机器学习,而Python是一种简单易懂、适用范围广泛的编程语言。结合在一起,这两种工具无疑会使你在大数据处理方面更上一层楼。

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《Spark-python入门》
文章链接:https://macsishu.com/spark-python-primer
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。