Python 在pyspark中广播时,子类化ndarray会丢弃信息

Python 在pyspark中广播时,子类化ndarray会丢弃信息,python,numpy,pyspark,Python,Numpy,Pyspark,我希望有人能帮我调试spark中的子类ndarrays出现的问题。特别是当一个子类数组似乎丢失了额外的信息时。下面是一个简单的例子: >>> import numpy as np >>> >>> class Test(np.ndarray): ... def __new__(cls, input_array, info=None): ... obj = np.asarray(input_array).view(cls

我希望有人能帮我调试spark中的子类
ndarray
s出现的问题。特别是当一个子类数组似乎丢失了额外的信息时。下面是一个简单的例子:

>>> import numpy as np
>>> 
>>> class Test(np.ndarray):
...     def __new__(cls, input_array, info=None):
...         obj = np.asarray(input_array).view(cls)
...         obj.info = info
...         return obj
...     
...     def __array_finalize__(self, obj):
...         if not hasattr(self, "info"):
...             self.info = getattr(obj, 'info', None)
...         else:
...             print("has info attribute: %s" % getattr(self, 'info'))
... 
>>> test = Test(np.array([[1,2,3],[4,5,6]]), info="info")
>>> print(test.info)
info
>>> print(sc.broadcast(test).value)
[[1 2 3]
 [4 5 6]]
>>> print(sc.broadcast(test).value.info)
None

至少,您有一个小的输入错误-您正在检查
hasattr(obj,“info”)
,而您应该检查
if hasattr(self,“info”)
。由于if语句翻转,信息不会被带入

test = Test(np.array([[1,2,3],[4,5,6]]), info="info")
print test.info # info
test2 = test[1:]
print test2.info # info

抢手货但没有解决首要问题:(此线程解决了它: