PySpark ImageSchma.toNDArray AttributeError:“ NoneType”对象没有属性“ _jvm”

时间:2019-10-25 06:18:00

标签: python apache-spark pyspark rdd

我到处都在搜索这个问题,甚至遇到了这样的帖子 没有提供解决方案here

但是我发现,希望有人能有所启发。使用数据块,我从文件夹位置读取了一些图像数据

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

当然,这将返回带有ImageSchema.ColumnSchema结构的DF。如引用的SO文章中所述,当我尝试使用map将图像从bytearray转换为numpy array

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

它引发错误

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

但是,当我收集图像时

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

然后将toNDArray()方法应用于收集的有效图像

ImageSchema.toNDArray(x)

然后,然后在收集的图像上调用.toNDArray() AND IT WORKS 后,我再次返回并运行map函数。这也是可重现的。我将重新启动集群,尝试在rdd上映射toNDArray()方法,但它失败。收集一个图像,对收集的图像执行该方法,然后返回并重新运行代码以在rdd上执行地图,它就可以工作。

什么可能导致此行为?我知道在Scala中,当我定义UDF时,如果未在函数中传递sparksession,则必须首先从传递的RDD中获取sparkContex

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

这可能是问题吗?第一次调用该方法时,spark上下文不存在吗?

0 个答案:

没有答案