【发布时间】:2019-05-13 06:12:43
【问题描述】:
我对过滤 pandas 和 pyspark 数据帧时的时差有疑问:
import time
import numpy as np
import pandas as pd
from random import shuffle
from pyspark.sql import SparkSession
spark = SparkSession.builder.getOrCreate()
df = pd.DataFrame(np.random.randint(1000000, size=400000).reshape(-1, 2))
list_filter = list(range(10000))
shuffle(list_filter)
# pandas is fast
t0 = time.time()
df_filtered = df[df[0].isin(list_filter)]
print(time.time() - t0)
# 0.0072
df_spark = spark.createDataFrame(df)
# pyspark is slow
t0 = time.time()
df_spark_filtered = df_spark[df_spark[0].isin(list_filter)]
print(time.time() - t0)
# 3.1232
如果我将list_filter 的长度增加到 10000,那么执行时间是 0.01353 和 17.6768 秒。 isin seems 的 Pandas 实现具有计算效率。你能解释一下为什么 pyspark 数据帧的过滤如此缓慢,我怎样才能快速执行这种过滤?
【问题讨论】:
-
您是否尝试增加分区大小并使用 spark-submit 运行?
-
@coldspeed 我是 spark 新手,能否详细说明一下?
标签: python pandas pyspark pyspark-sql