我真的是新手,所以我的问题可能太天真了。 我有一个对象的列表,我需要分别执行一些配置单元查询。假设,我有以下内容(为了简单起见,我在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?但它似乎与我的情况不符,因为我不知道我名单的长度。关于如何更有效地完成这项工作有什么建议吗?在
你能不能先用列表中的len函数来得到这个长度??在
相关问题 更多 >
编程相关推荐