在python对象上使用parallelize函数

在python对象上使用parallelize函数,python,apache-spark,pyspark,Python,Apache Spark,Pyspark,在pyspark中,是否可以在python对象上使用parallelize函数?我想在对象列表上并行运行,使用函数修改它们,然后打印这些对象 def init_spark(appname): spark = SparkSession.builder.appName(appname).getOrCreate() sc = spark.sparkContext return spark,sc def run_on_configs_spark(object_list): spark,

在pyspark中,是否可以在python对象上使用parallelize函数?我想在对象列表上并行运行,使用函数修改它们,然后打印这些对象

def init_spark(appname):
  spark = SparkSession.builder.appName(appname).getOrCreate()
  sc = spark.sparkContext
  return spark,sc

def run_on_configs_spark(object_list):
  spark,sc = init_spark(appname="analysis")
  p_configs_RDD = sc.parallelize(object_list)
  p_configs_RDD=p_configs_RDD.map(func)
  p_configs_RDD.foreach(print)

def func(object):
  return do-somthing(object)
当我运行上述代码时,我遇到了一个错误“AttributeError:无法在上获取属性'Object'。我怎样才能解决它

我做了以下变通方法。但我认为这通常不是一个好的解决方案,它假设我可以更改对象的构造函数

我已将该对象转换为字典,并从目录中解释该对象

 def init_spark(appname):
  spark = SparkSession.builder.appName(appname).getOrCreate()
  sc = spark.sparkContext
  return spark,sc

def run_on_configs_spark(object_list):
  spark,sc = init_spark(appname="analysis")
  p_configs_RDD = sc.parallelize([x.__dict__() for x in object_list])
  p_configs_RDD=p_configs_RDD.map(func)
  p_configs_RDD.foreach(print)

def func(dict):
  object=CreateObject(create_from_dict=True,dictionary=dict)
  return do-something(object)
在对象的构造函数中:

class Object:
   def __init__(create_from_dict=False,dictionary=None, other_params...):
      if(create_from_dict):
        self.__dict__.update(dictionary)
        return

有更好的解决方案吗?

为了得到更好的答案,我建议您发布一个对象列表的示例和所需的输出,以便我们可以使用实际代码进行测试

根据pyspark文档(如上所述),parallelize函数应该接受任何集合,因此我认为问题可能在于对象列表。由于输入类型是字典(或其他映射对象)的列表,我认为解决方法可以工作

至于在一般创建的对象上运行的模块化方法,这取决于您希望RDD是怎样的,但是一般的方法应该是将您想要的整个对象转换为集合类型的对象。一个不修改构造函数/结构的解决方案可以是

sc.parallelize([对象列表])


关键是要确保输入为收集类型。

当您询问是否有更好的解决方案时,您希望得到什么改进?另外,当你说Python对象时,你是指字典还是其他一些自定义对象?一种模块化的方式,可以在不修改对象构造函数的情况下运行一般创建的对象(参见上面的“对象类”)。