【问题标题】:is there a faster way to convert a column of pyspark dataframe into python list? (Collect() is very slow )有没有更快的方法将一列 pyspark 数据框转换为 python 列表? (Collect() 非常慢)
【发布时间】:2020-07-20 17:14:35
【问题描述】:

我正在尝试使用 collect 函数将一列 pyspark 数据框存储到 python 列表中。 例如

list_a = [row[column_name] for dataset_name.collect()中的行]

但这是一个非常缓慢的过程,对于 3 列和 27 行的数据帧需要超过 10 秒。

有没有更快的方法?

我尝试在此步骤之前缓存数据。使用此步骤,上述查询将在 2 秒内执行,但缓存步骤本身需要大约 7-8 秒,因此我减少时间的目的并未完全实现。

而且我的代码是这样的,我需要在此步骤之前每次都重建数据帧,因此需要再次进行缓存,因此这一步(缓存数据帧)对缩短时间没有太大帮助。

提前致谢!

【问题讨论】:

    标签: python python-3.x pyspark apache-spark-sql


    【解决方案1】:

    只需收集一列数据即可对您的代码进行轻微优化:

    list_a = [row[column_name] for row in dataset_name.select(column_name).collect()]
    

    如果你使用quinn,这段代码会更干净:

    import quinn
    
    list_a = quinn.column_to_list(df, col_name)
    

    collect() 将所有数据传输到驱动节点,成本很高。您只能通过收集更少的数据来加快速度(例如,dataset_name.select(column_name).distinct().collect() 通常会更快)。

    Spark 针对在集群中分布数据集和并行运行计算进行了优化。 Spark 的分布式特性使得在单个节点上收集结果的计算速度相对较慢。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-08-20
      • 2020-01-11
      • 2017-07-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-22
      相关资源
      最近更新 更多