【大数据】【Spark】书籍推荐统计分析

数据集说明

  • 在这个借助Goodbook网站收集的数据集中,可以获得有关书籍的信息,如作者、页数、评分和其他信息
文件说明
books.csv
bookID,title,authors,average_rating,isbn,isbn13,language_code,  num_pages,ratings_count,text_reviews_count,publication_date,publisher
1,Harry Potter and the Half-Blood Prince (Harry Potter  #6),J.K. Rowling/Mary GrandPré,4.57,0439785960,9780439785969,eng,652,2095690,27591,9/16/2006,Scholastic Inc.
2,Harry Potter and the Order of the Phoenix (Harry Potter  #5),J.K. Rowling/Mary GrandPré,4.49,0439358078,9780439358071,eng,870,2153167,29221,9/1/2004,Scholastic Inc.
4,Harry Potter and the Chamber of Secrets (Harry Potter  #2),J.K. Rowling,4.42,0439554896,9780439554893,eng,352,6333,244,11/1/2003,Scholastic
...

业务需求

(1)统计最受关注的书籍Top 10
(2)统计书籍篇幅Top 10
(3)统计不同出版社出版的书籍数量
(4)统计不同语言的书籍数量
(5)统计最不受关注的高分书籍Top 10(评分4.5以上,评分人数1w以上,评论数200以下)
(6)统计不同年份出版的书籍数量
(7)统计不同作者的书籍的平均评分
(8)统计在最受关注的书籍Top 1000中,不同出版社出版的书籍数量
(9)统计在最受关注的书籍Top 1000中,不同语言的书籍数量
(10)统计不同作者的书籍的平均受关注程度

需求实现

数据预处理
# -*- coding: utf-8 -*-
# @Time     : 2024/12/14 0:49
# @Author   : 从心
# @File     : spark_book_recommendation_analysis_preprocess.py
# @Software : PyCharm

import pandas as pd
import numpy as np

df = pd.read_csv('../data/books.csv', on_bad_lines='skip')
df.columns = df.columns.str.strip()
print(df.head(3))
df.info()

df = df.dropna()
df.info()

df = df.drop_duplicates(keep='first')
df.info()


def convert_date(date_str):
    try:
        converted_date = pd.to_datetime(date_str, format='%m/%d/%Y')

        return converted_date.strftime('%Y-%m-%d')
    except ValueError as e:
        print(f"{
     date_str} 转换失败: {
     e}")

        return np.nan


df['publication_date'] = df['publication_date'].apply(convert_date)
df = df.dropna()
df.info()

print(df['language_code'].unique())

df.to_csv('../data/books_cleaned.csv', encoding='utf-8', index=False)
数据统计分析
# -*- coding: utf-8 -*-
# @Time     : 2024/12/14 0:50
# @Author   : 从心
# @File     : spark_book_recommendation_analysis.py
# @Software : PyCharm

from pyspark import SparkConf
from pyspark.sql import SparkSession
from pyspark.sql.functions import date_format, split, rank
from pyspark.sql.window import Window

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

# 视图 books
df_books = spark.read.csv('/input_spark_book_recommendation_analysis/books_cleaned.csv', header=True, inferSchema=True)
df_books.show(10)
df_books.createOrReplaceTempView('books')

"""
(1) 统计最受关注的书籍 Top 10
"""
df_books_attention_top_10 = spark.sql(
    """
    select bookID, title, text_reviews_count, substring_index(authors, '/', 1) as author_first, average_rating, isbn, isbn13, language_code, num_pages, ratings_count, publication_date, publisher
    from books
    order by text_reviews_count desc
    """
)
df_books_attention_top_10 = df_books_attention_top_10.repartition(1)
df_books_attention_top_10.show(n=10, truncate=False)
df_books_attention_top_10.write.csv('/result/books_attention_top_10.csv',
                                    mode='overwrite')

"""
(2) 统计书籍篇幅 Top 10
"""
df_books_length_top_10 = spark.sql(
    """
    select bookID, title, num_pages, substring_index(authors, '/', 1) as author_first, average_rating, isbn, isbn13, language_code, ratings_count, text_reviews_count, publication_date, publisher
    from books
    order by num_pages desc
    """
)
df_books_length_top_10 = df_books_length_top_10.repartition(1)
df_books_length_top_10.show(n=10, truncate=False)
df_books_length_top_10.write.csv('/result/books_length_top_10.csv', mode='overwrite')

"""
(3) 统计不同出版社出版的书籍数量
"""
df_publisher_books_num = spark.sql(
    """
    select publisher, count(*) as books_num
    from books
    group by publisher
    order by books_num desc
    """
)
df_publisher_books_num = df_publisher_books_num.repartition(1)
df_publisher_books_num.show(n=10, truncate=False)
df_publisher_books_num.write.csv('/result/publisher_books_num.csv',
                                 mode='overwrite')
"""
(4) 统计不同语言的书籍数量
"""
df_language_books_num = spark.sql(
    """
    select language_code, count(*) as books_num
    from books
    group by language_code
    order by books_num desc
    """
)
df_language_books_num = df_language_books_num.repartition(1)
df_language_books_num.show(n=10, truncate=False)
df_language_books_num.write.csv('/result/language_books_num.csv', mode='overwrite')

"""
(5) 统计最不受关注的高分书籍 Top 10 (评分 4.5 以上, 评分人数 1w 以上, 评论数 200 以下)
"""
df_books_rating_no_attention_top_10 = spark.sql(
    """
    select bookID, title, substring_index(authors, '/', 1) as author_first, average_rating, isbn, isbn13, language_code, num_pages, ratings_count, text_reviews_count, publication_date, publisher
    from books
    where average_rating > 4.5 and ratings_count > 10000 and text_reviews_count < 200
    order by text_reviews_count asc
    """
)
df_books_rating_no_attention_top_10 = df_books_rating_no_attention_top_10.repartition(1)
df_books_rating_no_attention_top_10.show(n=10, truncate=False)
df_books_rating_no_attention_top_10.write.csv(
    '/result/books_rating_no_attention_top_10.csv', mode='overwrite')

# 视图 books_with_year
df_books_with_year = df_books.withColumn('year', date_format(df_books
<think>好的,用户需要关于Hadoop和Spark大数据处理方面的实战分析资料,比如教程和案例。首先,我得确认用户的具体需求是什么。可能他们正在处理大数据项目,需要实际的指导。Hadoop和Spark都是大数据处理的核心工具,但各有侧重。Hadoop的HDFS适合分布式存储,而MapReduce用于批处理。Spark则以内存计算见长,适合迭代任务,比如机器学习和实时处理。 接下来,我要检查已有的引用资料。引用[1]提到用Spark进行数据读取、清洗、预处理和分析,引用[2]解释了Hadoop的基础架构,引用[3]和[4]提供了实战书籍的章节内容,包括Hadoop单节点集群的测试和Spark RDD的操作。这些引用应该能帮助用户找到需要的实战案例。 用户可能需要的不仅仅是资料推荐,还有具体的应用场景和操作步骤。比如,如何结合Hadoop和Spark,或者如何处理实际的数据分析任务。根据引用[3]和[4],实战书籍里有整合开发和RDD操作的实例,这对用户来说应该很有用。此外,引用[1]中的Spark SQL和数据仓库应用也是一个关键点,可以指导用户进行数据查询和整合分析。 可能需要生成相关问题,引导用户深入思考。例如,如何搭建Hadoop和Spark环境,或者优化性能的方法。另外,用户可能对实际案例中的数据处理流程感兴趣,比如日志分析推荐系统,这些都可以从引用中找到相关案例。 最后,确保回答结构清晰,分点列出参考资料和实战案例,帮助用户逐步解决问题。同时,提醒用户注意版本兼容性,比如Hadoop和Spark的版本匹配,避免环境配置问题。总结来说,用户需要的是结合理论和实践的指导,引用提供的书籍和章节正好能满足这一点。</think>### HadoopSpark大数据实战分析资料推荐 #### 一、核心参考资料推荐 1. **《Hadoop+Spark大数据巨量分析机器学习整合开发实战》** - 包含Hadoop单节点集群搭建(基于Debian系统)和Spark RDD弹性分布式数据集操作[^3] - 实战案例覆盖数据存储、清洗、MapReduce计算和机器学习模型部署 - 第9章重点讲解Spark RDD的转换行动操作(如`map`, `reduceByKey`),第10章演示IDE环境下的WordCount案例[^4] 2. **Apache官方档** - Hadoop HDFS件系统管理MapReduce编程范式[^2] - Spark SQL结构化数据处理(如`DataFrame`操作)流式计算(Spark Streaming)[^1] #### 二、典型实战场景案例 1. **日志分析系统** - 使用Hadoop存储TB级日志数据,通过Spark进行实时聚合分析(例如用户行为模式挖掘) - 技术栈示例: ```scala val logRDD = sc.textFile("hdfs://path/to/logs") val errorCount = logRDD.filter(_.contains("ERROR")).count() ``` 2. **推荐系统数据预处理** - 基于Spark MLlib实现协同过滤算法,结合Hadoop存储用户画像数据 - 关键步骤:特征工程$\rightarrow$模型训练$\rightarrow$结果存储到HBase 3. **金融风控实时计算** - 使用Spark Streaming处理Kafka流式数据,Hadoop归档历史交易记录 - 实现异常交易检测(如滑动窗口统计:$$ \sum_{t=T-5}^{T} \text{TransactionAmount}_t > \text{Threshold} $$) #### 、环境搭建建议 1. **单机伪分布式环境** - Hadoop 3.x + Spark 3.x + JDK 11(兼容性需验证) - 配置示例: ```xml <!-- core-site.xml --> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> ``` 2. **集群部署要点** - 数据本地化优化:HDFS块大小设置为128MB - Spark资源分配策略:`spark.executor.memory``spark.driver.memory`比例建议2:1
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值