PySpark ImageSchma.toNDArray AttributeError: у объекта 'NoneType' нет атрибута '_jvm' - PullRequest
0 голосов
/ 25 октября 2019

Я искал повсюду по этой проблеме, и даже наткнулся на этот пост ТАК без предоставленного решения здесь

Но я сделал открытие, что, надеюсь, кто-то может пролить светна. Используя блоки данных, я считываю некоторые данные изображения из папки

df = spark.read.format("image").load("/FileStore/tables/*")

Конечно, это возвращает DF со структурой ImageSchema.ColumnSchema. Как упоминалось в цитируемом сообщении SO, когда я пытаюсь преобразовать изображения из bytearray в массив numpy, используя map

df.rdd.map(lambda x: ImageSchema.toNDArray(x[0])).take(1)

, выдается ошибка

AttributeError: 'NoneType' object has no attribute '_jvm'

Однако, когда я собираюimage

x = df.rdd.take(1)[0]

Затем примените метод toNDArray () к собранному изображению, которое он работает

ImageSchema.toNDArray(x)

И ТО Я возвращаюсь и снова запускаю функцию карты послевызов .toNDArray () для собранного изображения И ЭТО РАБОТАЕТ . Это также воспроизводимо. Я перезапущу кластер, попробую отобразить метод toNDArray () на rdd, и он не будет работать. Соберите изображение, выполните метод на собранном изображении, затем вернитесь назад и повторно запустите код, чтобы выполнить карту на rdd, и это работает.

Что может быть причиной такого поведения? Я знаю в scala, когда я определил UDF, мне нужно было бы сначала получить sparkContex из переданного RDD, если бы сама спарк-сессия не была передана в функции

def(x: RDD[type]):
    sc = x.sparkContext
    .
    .
    .

Может ли это быть проблемой? Контекст искры отсутствует при первом вызове метода?

...