并行化sp中的for循环

2024-04-25 04:39:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我真的是新手,所以我的问题可能太天真了。 我有一个对象的列表,我需要分别执行一些配置单元查询。假设,我有以下内容(为了简单起见,我在SparkSession.builder)公司名称:

class Car(object):
    def __init__(self, color, brand):
        self._color = color
        self._brand = brand

from pyspark.sql import SparkSession
spark = SparkSession.getOrCreate()

cars = [Car('col_'+str(i) , 'brand_'+str(i)) for i in range(100)]  #list of objects to iterate on
results = []
for car in cars:
    query1 = "select * from carcolors where car_color = {} order by dt limit 1".format(car._color)).first()
    first_col = spark.sql(query1)
     query2 = "select * from carbrands where car_brand = {} order by dt limit 1".format(car._brand)).first()
    first_brand = spark.sql(query2)
    results.append([first_col , first_brand])

在我看来for循环是一个非常糟糕的主意,因为没有任何并行化(也就是说,除了每个查询)。我看到了这个建议:How to run independent transformations in parallel using PySpark?但它似乎与我的情况不符,因为我不知道我名单的长度。关于如何更有效地完成这项工作有什么建议吗?在


Tags: infromselfforsqlcolcarcars