首页 > 解决方案 > 无法在 Jupyter Notebook 上使用 Pyspark 完成简单的工作(操作系统:Windows 10,在本地运行代码 - 单节点)

问题描述

数据来源:- https://www.kaggle.com/saurav9786/amazon-product-reviews 总行数:~ 7M (311 MBs)

我正在尝试在 Jupyter Notebook 上使用 Pyspark。我能够成功设置 Sparksession,对其进行测试并直接将上述评论数据(本地存储)读取为 spark 数据框。但是,即使是最简单的数据操作作业,我也无法成功完成,例如简单地计算不同的用户 ID,或者甚至无法显示前 10 行。工作无休止地运行。

我已经使用以下代码设置并配置了我的 sparksession:

import findspark
findspark.init()

from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
conf = pyspark.SparkConf().setAppName('appName').setMaster('local[*]')
sc = pyspark.SparkContext(conf=conf)
spark = SparkSession(sc)

import pyspark.sql.functions as F
from pyspark.sql.types import *

我使用以下代码将数据集读取为火花数据框:

d_schema = StructType().add("userid","string").add("productid","string").add("rating","integer").add("datetime","string")
spark_ratings = spark.read.csv("source_data.csv",schema=d_schema,header=None)

在 672 毫秒内读取数据。

但在此之后,我尝试了以下方法:

spark_ratings.select(F.countDistinct("userid")).show()

或者

spark_ratings.show(10)

并且该作业将永远运行,不会引发错误,但不会提供结果。

我是使用 Pyspark 的初学者,我在这里遗漏了一些关键的东西吗?

我有一个 12 GB RAM 和 Intel i5 系统。

标签: windowspysparkjupyter

解决方案


你等了多长时间?实际上,spark 是延迟评估的,并且在对其应用操作之前不会处理您的数据。因此,在 672 毫秒内读取数据只是添加到 DAG 中,但是一旦您应用操作 show(),它实际上会读取内存中的完整数据并为您提供输出。

因此,这可能需要一些时间,具体取决于您的数据大小。


推荐阅读