为啥要在 PySpark 中导入熊猫?

Posted

技术标签:

【中文标题】为啥要在 PySpark 中导入熊猫?【英文标题】:Why Import pandas in PySpark?为什么要在 PySpark 中导入熊猫? 【发布时间】:2021-02-11 08:36:31 【问题描述】:

嗨,在数据科学领域的大学里,我们了解到,如果我们想处理小数据,我们应该使用 pandas,如果我们处理大数据,我们应该使用 spark,例如 Python 程序员 PySpark。

最近我在云中的一个 Hackaton(azure Synapse,在 Spark 内部工作)中看到在笔记本中导入 pandas(我想代码是好的原因是由微软人制作的)

import pandas 
from azureml.core import Dataset
training_pd = training_data.toPandas().to_csv('training_pd.csv', index=False)

他们为什么这样做?

【问题讨论】:

可能使用 pandas 写入单个文件 training_pd.csv,因为 Spark 写入具有 多个 部分文件的文件夹。根据您提供的代码,我看不到其他原因。 @blackbishop 感谢您的评论。如果有人有其他想法,我们会保留该问题,如果没有,我们将用您的答案关闭它。 towardsdatascience.com/… 很有趣 【参考方案1】:

Pandas 数据帧不支持并行化。另一方面,使用 Pandas,您不需要集群,您有更多的库和易于扩展的示例。说实话,对于每一项不需要扩展的任务,它的性能都更好。

因此,如果您开始学习 Pandas 的数据工程生活,您会遇到两件事:

外化知识:现成代码、sn-ps 和项目; 内化知识:您熟悉并更喜欢的 API、模式、保证以及如何编写此代码的直觉。

对于一个拿着锤子的人来说,一切都像钉子。这并不总是一件坏事。如果你有严格的最后期限,做得比完美更好!现在最好使用 Pandas,而不是多年来学习适当的可扩展解决方案。

想象一下,您想在 PySpark 模式下使用 Apache Zeppelin 笔记本,并提供所有这些很酷的可视化效果。但它并不能完全满足您的要求,您正在考虑如何快速修复它。同时,您可以立即 google 一个现成的 Pandas 解决方案。这是一条路;您没有其他选择来满足您的最后期限。

另一个猜测是,如果你用 Python 编写代码,你可以在 PyCharm 等每个优秀的 IDE 中使用交互式调试器轻松调试它。这通常不适用于在线笔记本,尤其是在 Spark 模式下。你知道 Spark 有什么好的调试器吗?我什么都不知道(据我所知,来自 IDEA 的大数据工具插件的人们正试图为 Scala 解决这个问题,但不是为 Python 解决这个问题)。所以你必须在 IDE 中编写代码,然后将其复制粘贴到 notebook 中。

最后但同样重要的是,这可能只是一个错误。人们并不总是完全清楚自己在做什么,尤其是在大数据这样的大领域。你很幸运有这门大学课程。互联网上的普通乔没有这样的选择。

我应该停在这里,因为只有猜测。

【讨论】:

【参考方案2】:

使用 PySpark 和 Pandas 的主要区别在于语法。为了展示这种差异,我提供了一个读取 parquet 文件并对数据进行一些转换的简单示例。如您所见,PySpark 和 Pandas 的语法完全不同,这意味着您的 Pandas 知识不能直接转移到 PySpark。

# Pandas
pandasDF = pd.read_parquet(path_to_data)
pandasDF['SumOfTwoColumns'] = pandasDF['Column1'] + pandasDF['Column2']
pandasDF.rename('Column1': 'Col1', 'Column2': 'Col2', axis=1, inplace=True)

# PySpark
sparkDF = spark.read.parquet(path_to_data)
sparkDF = sparkDF.withColumn('SumOfTwoColumns', col('Column1') + col('Column2'))
sparkDF = sparkDF.withColumnRenamed('Column1', 'Col1').withColumnRenamed('Column2', 'Col2')

这些用法上的差异以及语法上的差异意味着从使用纯 Pandas 代码转换为纯 PySpark 代码时存在学习曲线。这也意味着您的旧版 Pandas 代码不能直接在 Spark 上与 PySpark 一起使用。幸运的是,有一些解决方案可以让您在 Spark 上使用您的 Pandas 代码和知识。

在 Pandas 中利用 Spark 强大功能的解决方案 在 Spark 上使用 Pandas 代码主要有两种选择:Koalas 和 Pandas UDFs

虽然不建议在使用 pyspark 时使用 Pandas,但有时我也看到有人这样做。

【讨论】:

【参考方案3】:

基本上,制作该作品的人似乎更适合 Pandas。当然,Pandas 无法扩展,如果您的数据集增长,您需要更多的 RAM,并且可能需要更快的 CPU(就单核性能而言更快)。虽然这可能会限制某些场景,但在示例中,csv 似乎不足以使用 spark。 我看不出任何其他原因。

【讨论】:

以上是关于为啥要在 PySpark 中导入熊猫?的主要内容,如果未能解决你的问题,请参考以下文章

使用熊猫在python中导入数据

如何在 pyspark 中加入带有熊猫数据框的配置单元表?

如何在 PySpark 中从表中导入数据时排除 Header

无法在 pyspark 中导入 parse_url

如何在 Databricks pyspark 中导入 Excel 文件

在 pyspark 的映射器中导入错误