kom*_*ikc 3 python dataframe apache-spark pyspark databricks
谁能解释一下 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))
Run Code Online (Sandbox Code Playgroud)
输出是
Time taken : 0:00:00.109349
Run Code Online (Sandbox Code Playgroud)
如果我将 Spark Dataframe 与 10 个工作节点一起使用,我可以期待以下结果吗?(这是 Pandas DataFrame 所用时间的 1/10)
Time taken : 0:00:00.010935
Run Code Online (Sandbox Code Playgroud)
1) Pandas 数据帧没有分布式,Spark 的 DataFrame 是分布式的。-> 因此,您不会在 Pandas DataFrame 中获得并行处理的好处,并且对于大量数据,Pandas DataFrame 中的处理速度会降低。
2)Spark DataFrame 保证容错(它是有弹性的),而 Pandas DataFrame 不保证它。-> 因此,如果您的数据处理在处理之间中断/失败,那么 spark 可以从谱系(来自 DAG)重新生成失败的结果集。Pandas 不支持容错。您需要实现自己的框架来确保它。