【问题标题】:How Spark Dataframe is better than Pandas Dataframe in performance? [closed]Spark Dataframe 在性能上如何优于 Pandas Dataframe? [关闭]
【发布时间】:2019-09-18 14:35:11
【问题描述】:

谁能解释一下 Spark Dataframes 在执行时间方面比 Pandas Dataframes 更好。我正在处理中等数量的数据并进行 python 函数驱动的转换

例如,我的数据集中有一列数字从 1 到 100,000,并且想要执行基本的数字操作 - 创建一个新列,它是现有数字列的立方体。

from datetime import datetime
import numpy as np
import pandas as pd

def cube(num):
    return num**3

array_of_nums = np.arange(0,100000)

dataset = pd.DataFrame(array_of_nums, columns = ["numbers"])

start_time = datetime.now() 
# Some complex transformations...
dataset["cubed"] = [cube(x) for x in dataset.numbers]
end_time = datetime.now() 

print("Time taken :", (end_time-start_time))

输出是

Time taken : 0:00:00.109349

如果我使用具有 10 个工作节点的 Spark Dataframe,我可以期待以下结果吗? (这是 Pandas DataFrame 所用时间的 1/10)

Time taken : 0:00:00.010935

【问题讨论】:

  • Spark 的性能涉及很多方面,包括分叉进程之间通信的 http 开销,所以我不会说只是速度提高了 10 倍
  • 这有助于了解 spark/pandas 的性能(本地 Spark,但大多数也适用于集群):stackoverflow.com/questions/48815341/…
  • spark 用于处理大量数据(TB、PB)...如果您可以在单台机器上运行逻辑而不会出现性能问题,那么使用 spark 毫无意义,因为您只是浪费资源试图分发不需要分发的东西。

标签: python apache-spark dataframe pyspark databricks


【解决方案1】:

1) Pandas 数据帧未分发,Spark 的数据帧已分发。 -> 因此,您不会从 Pandas DataFrame 中获得并行处理的好处,并且对于大量数据,Pandas DataFrame 中的处理速度会降低。

2) Spark DataFrame 向您保证容错(它是有弹性的),而 pandas DataFrame 不保证它。 -> 因此,如果您的数据处理在处理之间中断/失败,那么 spark 可以从 lineage (from DAG) 重新生成失败的结果集。 Pandas 不支持容错。你需要实现自己的框架来保证它。

【讨论】:

  • 感谢您的回答,能否请您评论一下 Spark DataFrame 和 Pandas DataFrame 的性能指标?我在问题中提到的假设有多正确?
  • 它取决于许多参数,例如给定数据中的分区数、每个执行程序上可用的核心数、可用执行程序数、每个执行程序可用的内存量、调度程序的类型(公平/电容、等)用于资源管理器(yarn/standalone/mesos等)和许多其他集群配置参数。完成 Spark 作业所需的时间与集群中的节点数量不成正比。如果您已经在几毫秒内获得结果,那么坚持使用 python 可能会更好。如果过程需要数小时(> 1 或 2 小时)才能完成,请使用 spark。
猜你喜欢
  • 2016-01-29
  • 2019-05-26
  • 2016-09-26
  • 2023-03-26
  • 2019-07-08
  • 2017-03-17
  • 2019-07-18
  • 1970-01-01
相关资源
最近更新 更多