Pyspark:与使用 pandas 创建数据帧相比,为啥使用 pyspark 创建数据帧需要更多时间 [重复]

Posted

技术标签:

【中文标题】Pyspark:与使用 pandas 创建数据帧相比,为啥使用 pyspark 创建数据帧需要更多时间 [重复]【英文标题】:Pyspark : Why does creating a dataframe using pyspark take more time as compared to creating a dataframe using pandas [duplicate]Pyspark:与使用 pandas 创建数据帧相比,为什么使用 pyspark 创建数据帧需要更多时间 [重复] 【发布时间】:2020-05-22 12:54:39 【问题描述】:

我正在使用 pandas.read_csv() 从 8 MB 文件中创建数据框。

df_ratings = pd.read_csv(r'D:\Study\Lopa\TEDAX_RE\MOVIE_RECOMMENDATION\MOVIE_LENS\MONGO_DB\DATA\INPUT_DATA\ratings.csv')
list_users = df_ratings['userId'].unique().tolist()
print(list_users)

这需要 0.34 秒

使用火花

from pyspark.context import SparkContext

from pyspark.sql.session import SparkSession

sc = SparkContext('local[*]')

spark_df = spark.read.format('csv').options(header='true', inferSchema='true').load(r'D:\Study\Lopa\TEDAX_RE\MOVIE_RECOMMENDATION\MOVIE_LENS\MONGO_DB\DATA\INPUT_DATA\ratings.csv').cache()
spark_df.createOrReplaceTempView("user_table")

query = "SELECT DISTINCT userid FROM user_table"

list_users_data = spark.sql(query).collect()

list_users = [i.userid for i in list_users_data]

print(list_users)

这大约需要 16 秒。

与 Python Pandas 代码相比,Pyspark 代码花费的时间应该更少。 我是否缺少任何配置?

注意:我在具有 8GB RAM 4 核 CPU 系统的 Windows 系统中运行此代码。

spark = SparkSession(sc)

【问题讨论】:

你能发布两个输出吗? @Srinivas - 两个输出都是相同的。它是 1000 个用户 ID 的列表。[102524, 137501, 31367, 95994, 104688,.......] 【参考方案1】:

与 Python Pandas 代码相比,Pyspark 代码花费的时间应该更少。

不,不应该。对于一个小数据集,大部分时间都是执行开销——启动驱动程序、启动工作程序、DAG 创建和执行。 Spark 应该用于处理大型数据集,它无法容纳在一台机器的内存中,因此您需要几个工人来处理它。如果您的数据足够小,一台服务器可以处理它 - 坚持使用 Pandas,您就不需要 Spark。

【讨论】:

以上是关于Pyspark:与使用 pandas 创建数据帧相比,为啥使用 pyspark 创建数据帧需要更多时间 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

通过 pyspark.sql.dataframe 将 XML 数据转换为 pandas 数据帧

pyspark 中的 Pandas UDF

将 pyspark pandas_udf 与 AWS EMR 一起使用时出现“没有名为‘pandas’的模块”错误

pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换

pyspark.sql.DataFrame与pandas.DataFrame之间的相互转换

在 pandas 数据帧上应用 Pyspark 管道