Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/apache-spark/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Pandas 为什么在PySpark进口熊猫?_Pandas_Apache Spark_Pyspark - Fatal编程技术网

Pandas 为什么在PySpark进口熊猫?

Pandas 为什么在PySpark进口熊猫?,pandas,apache-spark,pyspark,Pandas,Apache Spark,Pyspark,大家好,在数据科学领域的大学里,我们了解到,如果我们想处理小数据,我们应该使用熊猫;如果我们处理大数据,我们可以使用spark,比如Python程序员PySpark 最近,我在一个Hackaton in the cloud(azure Synapse,在Spark中工作)中看到在笔记本中导入熊猫(我想代码是好的,因为它是由Microsoft人员编写的) 为什么要这样做?熊猫数据帧不支持并行化。另一方面,使用Pandas,您不需要集群,您有更多的库和易于扩展的示例。让我们说实话,它的性能对于每个不

大家好,在数据科学领域的大学里,我们了解到,如果我们想处理小数据,我们应该使用熊猫;如果我们处理大数据,我们可以使用spark,比如Python程序员PySpark

最近,我在一个Hackaton in the cloud(azure Synapse,在Spark中工作)中看到在笔记本中导入熊猫(我想代码是好的,因为它是由Microsoft人员编写的)


为什么要这样做?

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

因此,如果您开始数据工程生活学习,您将面临两件事:

  • 外部化知识:现成的代码、片段和项目
  • 内化知识:您非常熟悉并更喜欢的API、模式、保证以及如何编写此代码的直觉
对一个拿着锤子的人来说,一切都像钉子。这并不总是一件坏事。如果你有严格的截止日期,做得比完美更好!最好现在就使用熊猫,而不是多年学习合适的可扩展解决方案

想象一下,您想在PySpark模式下使用ApacheZeppelin笔记本,并使用所有这些很酷的可视化效果。但它并不完全满足您的要求,您正在考虑如何快速解决这一问题。同时,你可以立即谷歌一个现成的熊猫解决方案。这是一条路要走;你没有其他选择来满足你的最后期限

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

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


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

使用PySpark和Pandas的主要区别在于语法。为了显示这种差异,我提供了一个简单的示例,用于读取拼花地板文件并对数据进行一些转换。正如您所见,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代码不能直接在带有PySpark的Spark上使用。幸运的是,有一些解决方案允许您在Spark上使用Pandas代码和知识

利用Pandas Spark强大功能的解决方案 在Spark上使用熊猫代码主要有两种选择:考拉和熊猫UDF


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

基本上,让这项工作在熊猫身上感觉更合适的人。当然,Pandas不会扩展,如果数据集增长,您需要更多的RAM,可能需要更快的CPU(单核性能方面更快)。虽然这可能会限制某些场景,但在示例中,csv不足以使用spark。
我看不出任何其他原因。

可能需要使用pandas写入单个文件
training_pd.csv
,就像Spark写入包含多个零件文件的文件夹一样。根据您提供的代码,我看不出其他原因。@Blackishop感谢您的评论。如果有人有其他想法,我们会将问题留待讨论,如果没有,我们将以您的答案结束。很有趣
# 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')