为啥要在 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 中导入熊猫?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 PySpark 中从表中导入数据时排除 Header